全re为什么我的线段树就成了段错误树
查看原帖
全re为什么我的线段树就成了段错误树
1067789
Director_Ni楼主2024/12/15 14:30

re求调,感谢大佬

/*
 * @Author: Director-Ni nya0624@outlook.com
 * @Date: 2024-12-15 13:42:07
 * @LastEditors: Director-Ni nya0624@outlook.com
 * @LastEditTime: 2024-12-15 14:28:09
 * @FilePath: \NOI Exercise\P1198(segement tree)_only pushup.cpp
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int M=22;
int m;
ll d,t;
struct node{
    int l,r;
    ll w;
}no[M<<2];
/// @brief 
/// @param i当前节点 
/// @param l 区间左端点
/// @param r 区间右端点
void build(int i,int l1,int r1){
    no[i].l=l1;no[i].r=r1;
    if(l1==r1)    return;
    build(i<<1,l1,l1+(r1-l1)>>1);
    build(i<<1|1,l1+(1l-r1)>>1+1,r1);
    return;
}
void pushup(int i){
    no[i].w=max(no[i<<1|1].w,no[i<<1].w);
    return ;
}
void addn(int i,int x,long long v){
    if(no[i].l==no[i].r&&no[i].l==x){
        no[i].w=v;
        return;
    }
    else{
        int mid=no[i].l+(no[i].r-no[i].l)>>1;
        if(x<=mid){
            addn(i<<1,x,v);//递归左儿子
        }
        if(x>mid){
            addn(i<<1|1,x,v);//递归you儿子
        }
        pushup(i);
    }
    return;
}
ll que(int i,int l,int r){
    if(l<=no[i].l&&r>=no[i].r)  return no[i].w;
    else{
        int mid=no[i].l+(no[i].r-no[i].l)>>1;
        ll ret=-10;
        if(l<=mid){//查询的区间与当前递归到的区间的左侧有交集
            ret=que(i<<1,l,r);
        }
        if(r>=mid){//查询的区间与当前递归到的区间的右侧有交集
            ret=max(ret,que(i<<1|1,l,r));
        }
        return ret;
    }
}
int main(){
    cin>>m>>d;
    char k;t=0;
    long long shuru=0;
    build(1,1,m);
    int cnt=0;
    while(m--){
        cin>>k;
        cin>>shuru;
        if(k=='A'){

            addn(1,++cnt,(shuru+t)%d);
        }
        else{
            t=que(1,cnt-shuru+1,cnt);
            cout<<t<<endl;
        }
    }
    return 0;
}
2024/12/15 14:30
加载中...