社区讨论

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 条回复,欢迎继续交流。

正在加载回复...