这个期望O(1) 的 RMQ 会WA啊
#include<stdio.h>
#include<iostream>
#include<cmath>
#include<cstring>
#include<queue>
#include<stack>
#include<vector>
#include<set>
#include<map>
#include<algorithm>
//#define int long long
using namespace std;
const int maxn=2e6+20;
int mmx[maxn/20],lx[maxn],rx[maxn],a[maxn];
int st[maxn/20][24];
int _log2[maxn];
int n,m,s,len,ans;
void fsol()
{
len=max(_log2[n],3);
//len=1;
//len=max(3ll,(int)sqrt(n));
int sz=(n-1)/len+1;
register int i,j;
for(i=1;i<=sz;i++)
{
rx[i*len]=a[i*len];
lx[(i-1)*len+1]=a[(i-1)*len+1];
for(j=1;j<len;j++) rx[i*len-j]=max(a[i*len-j],rx[i*len-j+1]);
for(j=len-2;j>=0;j--) lx[i*len-j]=max(a[i*len-j],lx[i*len-j-1]);
mmx[i]=rx[(i-1)*len+1];
}
for(i=1;i<=sz;i++) st[i][0]=mmx[i];
for(j=1;(1<<j)<=sz;j++)
for(i=1;i<=sz;i++)
{
st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
}
return ;
}
int stans(int l,int r)
{
if(r<l) return 0;
return max(st[l][_log2[r-l+1]],st[r-(1<<(_log2[r-l+1]))+1][_log2[r-l+1]]);
}
int getans(int l,int r)
{
int lb,rb;
lb=(l-1)/len+1;
rb=(r-1)/len+1;
int ansmax=0;
if(lb==rb)
{
register int i;
for(i=l;i<=r;i++) ansmax=max(ansmax,a[i]);
return ans;
}
ansmax=max(rx[l],lx[r]);
ansmax=max(ansmax,stans(lb+1,rb-1));
return ansmax;
}
signed main()
{
//ios::sync_with_stdio(false);
register int i,j;
//cin>>n>>m>>s;
//cin>>n>>m;
scanf("%d %d",&n,&m);
//srand(s);
_log2[0]=-1;
//for(i=1;i<=n;i++) a[i]=read(),_log2[i]=_log2[i>>1]+1;
for(i=1;i<=n;i++) scanf("%d",&a[i]),_log2[i]=_log2[i>>1]+1;
fsol();
int l,r;
for(i=1;i<=m;i++)
{
scanf("%d %d",&l,&r);
//cin>>l>>r;
//l=read()%n+1,r=rand()%n+1;
if(l>r) swap(l,r);
//cout<<getans(l,r)<<endl;;
printf("%d\n",getans(l,r));
//ans+=getans(l,r);
}
//cout<<ans<<endl;
return 0;
}