大红大紫大黑求调
查看原帖
大红大紫大黑求调
973480
封禁用户楼主2024/10/4 15:45
#include<bits/stdc++.h>
using namespace std;
int dp[100001][25],k[100001];
int main(){
    int n,q;
    cin >> n >> q;
    for(int i=1;i<=n;i++) cin >> dp[i][0];
    k[1]=0;
    for(int i=2;i<=n;i++) k[i]=k[i<<1]+1;
    for(int i=1;i<=k[n];i++)
    	for(int j=1;j<=n-(1<<i)+1;j++) dp[j][i]=max(dp[j][i-1],dp[j+(1<<(i-1))][i-1]);
    while(q--){
        int l,r;
        cin >> l >> r;
        int t=k[r-l+1];
        cout << max(dp[l][t],dp[r-(1<<t)+1][t]) << endl;
    }
    return 0;
}
2024/10/4 15:45
加载中...