1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
#include<algorithm> #include<math.h> using namespace std; int logn[100005],f[100005][30]; int n,m; int (int x,int y) { for(int j=1; j<=25; j++) for(int i=1; i+(1<<j)-1<=n; i++) f[i][j]=max(f[i][j-1],f[i+(1<<j-1)][j-1]); } int rmq(int l,int r) { int k=log2(r-l+1); return max(f[l][k],f[r-(1<<k)+1][k]); } int main() { scanf("%d%d",&n,&m); for(int i=1; i<=n; i++)scanf("%d",&f[i][0]);; build_ST(1,n); for(int i=1; i<=m; i++) { int l,r; scanf("%d%d",&l,&r); printf("%dn",rmq(l,r)); } }
|
近期评论