P3865 【模板】ST 表
模板题,话不多说,之间贴代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int f[100005][20];
int a[100005];
void init(int a[],int n){
for(int i=1;i<=n;i++)f[i][0]=a[i];
for(int j=1;1<<j<=n;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 query(int l,int r){
int k=log2(r-l+1);
return max(f[l][k],f[r+1-(1<<k)][k]);
}
signed main(){
int n,m;
scanf("%lld %lld",&n,&m);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
init(a,n);
while(m--){
int l,r;
// cin>>l>>r;
scanf("%lld %lld",&l,&r);
printf("%lld\n",query(l,r));
// cout<<query(l,r)<<endl;
}
return 0;
}