刚学ST表,TLE求条(玄关)
查看原帖
刚学ST表,TLE求条(玄关)
1248477
zhujingy楼主2024/7/29 19:54
#include<bits/stdc++.h>

using namespace std;

int f[100010][20],n,m,b[100010];

inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}

int main()
{
	scanf("%d%d",&n,&m);
	
	for(int i=1;i<=n;i++)
		f[i][0]=read();
	
	b[1]=0;
	for(int i=2;i<=n;i++)
		b[i]=b[i>>1]+1;
		
	for(int j=1;j<=b[n];j++)
		for(int i=1;i<=n-(1<<j)+1;i++)
			f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
			
	for(int i=1;i<=m;i++)
	{
		int l,r;
		cin>>l>>r;
		int len=r-l+1;
		int k=b[len];
		cout<<max(f[l][k],f[r-(1<<k)+1][k])<<"\n"; 
	}
	return 0;
}
2024/7/29 19:54
加载中...