社区讨论
求助 暴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 条回复,欢迎继续交流。
正在加载回复...