复习。。。
#include<bits/stdc++.h> using namespace std; const int N=1e5+5; int lg[N],f[N][20]; inline int get_max(int l,int r){ int t=lg[r-l+1]; return max(f[l][t],f[r-(1<<t)+1][t]); } int main(){ int n,m; scanf("%d%d",&n,&m); int temp=2;lg[1]=0; for(register int i=2;i<=n;++i){ lg[i]=lg[i-1]; if(i>=temp)lg[i]++,temp<<=1; } for(register int i=1;i<=n;++i){ int t;scanf("%d",&t); f[i][0]=t; } for(register int j=1;j<20;++j){ for(register int i=1;i+(1<<j)-1<=n;++i){ f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]); } } for(register int i=1;i<=m;++i){ int l,r; scanf("%d%d",&l,&r); printf("%d ",get_max(l,r)); } return 0; }