社区讨论
80pts T11-12RE求指导
P3865【模板】ST 表 & RMQ 问题参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo2pqztw
- 此快照首次捕获于
- 2023/10/23 17:46 2 年前
- 此快照最后确认于
- 2023/10/23 17:46 2 年前
代码如下,T11-T12越界无法解决,测试点无法下载
CPP#include<iostream>
using std::cin, std::cout, std::endl;
const int MAXN = 200000, SR = 20;
class SpeedUp{...} // 快读模板,有疑问可前往本人用户页
using SpeedUp::rd, SpeedUp::flush, SpeedUp::write, SpeedUp::push, SpeedUp::fio;
// const int MAXN = 100000, SR = 18;
int tmp;
int memory_barrier1[MAXN];
int li[MAXN+20];
int st[MAXN+20][SR];
int lo2[MAXN+20];
int memory_barrier2[MAXN];
inline int ma(int a, int b){
return a > b ? a : b;
}
void get2(){
lo2[0] = 0;
for(int i=1;i<MAXN;i++){
lo2[i] = lo2[i-1];
if (!(i & (i - 1))){
lo2[i] += 1;
}
}
}
void process(){
static int limit, j;
for(int i = 0; i <= SR; i++){
limit = MAXN - (1 << i) + 1;
for(j = 1; j <= limit; j++){
tmp = ma(st[j][i], st[j+(1 << i)][i]);
st[j][i+1] = tmp;
}
for(; j < MAXN; j ++) st[j][i+1] = st[j][i];
}
}
int query(int l, int r){
static int lev;
lev = lo2[r - l] - 1;
//fio.debug(st, l, lev);;fio << ' ';fio.debug(st, r-(1 << lev)+1, lev);fio<<'\n';
return ma(st[l][lev], st[r - (1 << lev) + 1][lev]);
}
int main(){
int l, r;
int n = rd(), m = rd();
get2();
for(int i = 1;i <= n; i++){
tmp = rd();
li[i] = tmp;
st[i][0] = tmp;
}
process();
while(m--){
l = rd(), r = rd();
write(query(l,r));
push('\n');
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...