乆乆,80分()大佬帮帮忙!谢谢!!!
查看原帖
乆乆,80分()大佬帮帮忙!谢谢!!!
793831
Casto2楼主2023/5/3 15:16
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m,a[10000050],l[10000050],r[10000050],st[1000050][150],ans;
int cx(int x,int y)
{

		for(int j=20;j>=0;j--)
	    {
		    if(x+(1<<j)>y) continue;
		    else 
		    {
			    ans=max(ans,st[x][j]);
			    x=x+(1<<j);
		    }
//		    cout<<ans<<" ";
	    }
	return ans;
//	int gd=log(y-x+1)/log(2);
//	return max(st[x][gd-1],st[x+(1<<gd-1)][gd-1]);
}
int main()
{
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<=m;i++) scanf("%d %d",&l[i],&r[i]);
	for(int i=1;i<=n;i++) st[i][0]=max(a[i],a[i+1]);
	for(int j=1;(1<<j)<=n;j++)
	{
		for(int i=1;i+(1<<j-1)<=n;i++)
		{
			st[i][j]=max(st[i][j-1],st[i+(1<<j-1)][j-1]);
		}
	}
//	for(int j=1;(1<<j)<=n;j++)
//	{
//		for(int i=1;i+(1<<j-1)<=n;i++)
//		{
//			cout<<st[i][j]<<" ";
//		}
//	}
	for(int i=1;i<=m;i++) 
	{
		printf("%d\n",cx(l[i],r[i]));
		ans=0;
	}
//	cout<<endl<<st[4][2];
    return 0;
}
2023/5/3 15:16
加载中...