球球了。查询不是O(1)吗?
#include<bits/stdc++.h>
using namespace std;
long long n,m,lx,rx;
long long a[100005]={};
long long ST[101][100005]={};
long long loog[100005]={};
void STvoid()
{
for(int i=1;i<=n;i++)
{
ST[0][i]=a[i];
}
long long p=loog[n];
for(int k=1;k<=p;k++)
{
for(int i=1;i<=n-(1<<k)+1;i++)
{
ST[k][i]=max(ST[k-1][i],ST[k-1][i+(1<<(k-1))]);
}
}
return;
}
long long pix(long long l,long long r)
{
long long p=loog[r-l+1];
return max(ST[p][l],ST[p][r-(1<<p)+1]);
}
int main()
{
cin>>n>>m;
loog[1]=0;
for(int i=2;i<=n;i++)
{
loog[i]=loog[i>>1]+1;
}
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
STvoid();
for(int i=1;i<=m;i++)
{
cin>>lx>>rx;
cout<<pix(lx,rx)<<endl;
}
return 0;
}