模板
预处理
时间复杂度\(O(n\log n)\)
区间最值查询
时间复杂度\(O(1)\)
int a[1010],st[1010][15],mini[1010];
void rmq_init(int n){
for(int i=1;i<=n;i++) st[i][0]=a[i];
for(int j=1;(1<<j)<=n;j++){
for(int i=1;i+(1<<j)-1<=n;i++){
st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
}
}
for(int len=1;len<=n;len++){
int k=0;
while((1<<(k+1))<=len) k++;
mini[len]=k;
}
}
int rmq(int l,int r){
int k=mini[r-l+1];
return max(st[l][k],st[r-(1<<k)+1][k]);
}