eee
2024-09-16 15:38:27
发布于:广东
ST表
#include<bits/stdc++.h>
using namespace std;
int st[1145][1145], a[1145];
int n, m;
void init(){
for(int i = 0; i <= 16; i++){
for(int j = 1; j + (1 << i) - 1 <= n; j++){
if(i == 0) st[i][j] = a[j];
else{
st[i][j] = max(st[j][i - 1], st[j + (1 << i) - 1][i - 1]);
}
}
}
}
int RMQ(int l, int r){
int len = r - l + 1;
int d = __lg(len);
return max(st[l][d], st[r - (1 << d) + 1][d]);
}
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
init();
while(m--){
int l, r;
scanf("%d%d", &l, &r);
printf("%d\n", RMQ(l, r))
}
return 0;
}
平方和公式
立方和公式
全部评论 1
ST表开太大了吧……一般来说是st[15][1145]就行了(而且你还初始化错了,应该是
st[i][j] = max(st[i - 1][j], st[i - 1][j + (1 << i) - 1]);
2天前 来自 广东
0
有帮助,赞一个