RMQ动态规划的思想
int a[1100]; int dp[maxn][20]; void rmq_init(){ for(int i=0;i<n;i++) dp[i][0]=a[i]; for(int j=1;(1<<j)<=n;j++) for(int i=0;i+(1<<j)-1<n;i++){ dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]); } } int rmq(int l,int r){ int k=0; while(1<<(k+1)<=r+1-l)k++; return max(dp[l][k],dp[r-(1<<k)+1][k]); } for(int i=1;i<=m;i++){ scanf("%d %d",&l,&r); printf("%d ",rmq(l-1,r-1)); }