社区讨论

求助 暴0。。。线段树

P1198[JSOI2008] 最大数参与者 4已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mi6m1lwp
此快照首次捕获于
2025/11/20 07:05
4 个月前
此快照最后确认于
2025/11/20 07:05
4 个月前
查看原帖
CPP
#include<iostream>
#include<cstdio>
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root 1,treesz,1
#define LL long long
using namespace std;
const LL maxn=200001;
LL maxv[maxn<<2],add[maxn<<2];
LL mod,treesz=0;
void pushup(LL rt){
    maxv[rt]=max(maxv[rt<<1],maxv[rt<<1|1])%mod;
}
void pushdown(LL rt){
    if(add[rt]){
        add[rt<<1]=(add[rt<<1]+add[rt])%mod;
        add[rt<<1|1]=(add[rt<<1|1]+add[rt])%mod;
        maxv[rt<<1]=(maxv[rt<<1]+add[rt])%mod;
        maxv[rt<<1|1]=(maxv[rt<<1|1]+add[rt])%mod;
        add[rt]=0;
    }
}
void  updata(LL L,LL R,LL c,LL l,LL r,LL rt){
    if(L<=l&&r<=R){
        add[rt]=(add[rt]+c)%mod;maxv[rt]=(maxv[rt]+c)%mod; 
        return ;
    }
    pushdown(rt);
    LL mid=(l+r)>>1;
    if(L<=mid)updata(L,R,c,lson);
    if(mid<R)updata(L,R,c,rson);
    pushup(rt);
}
LL query(LL L,LL R,LL l,LL r,LL rt){
    if(L<=l&&r<=R)return maxv[rt]%mod;
    pushdown(rt);
    LL mid=(l+r)>>1;
    LL res=0;
    if(L<=mid)res=max(res,query(L,R,lson));
    if(mid<R)res=max(res,query(L,R,rson));
    return res%mod;
}
int main(){  
    char ch;LL T,a,t=0;
    scanf("%lld%lld",&T,&mod); 
    LL n=T;
     while(T--){
        scanf("%s%lld",&ch,&a);
        if(ch=='Q'){
            t=query(treesz+1-a,treesz,root);
            printf("%lld\n",t);
        }else {
            treesz++; 
            updata(treesz,treesz,(a+t)%mod,root);
        }
    }
}

回复

3 条回复,欢迎继续交流。

正在加载回复...