- 「一本通 4.2 例 1」数列区间最大值
AC代码
- 2025-3-23 13:48:25 @
代码(没过在下面评论):
#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;
}
信息
- ID
- 1363
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 108
- 已通过
- 31
- 上传者