代码(没过在下面评论):

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n,m,x,y,a[N],dp[N][30];
int main(){
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=n;i++){
        dp[i][0]=a[i];
    }
    for(int i=1;i<=30;i++){
        for(int j=1;j+(1<<i)-1<=n;j++){
            dp[j][i]=max(dp[j][i-1],dp[j+(1<<(i-1))][i-1]);
        }
    }
    for(int i=1;i<=m;i++){
        scanf("%d %d",&x,&y);  
        int t=log2(y-x+1);
        printf("%d\n",max(dp[x][t],dp[y-(1<<t)+1][t]));
    }return 0;
}

1 条评论

  • 1

信息

ID
1363
时间
1000ms
内存
256MiB
难度
6
标签
(无)
递交数
108
已通过
31
上传者