@[water_monster](/user/788202)
$update$函数里面的
```cpp
if(flag)
```
改成
```cpp
if(!flag)
```
然后注意随时记得取模,然后就$AC$啦!
by MrcFrst_LRY @ 2023-07-19 11:37:08
@[water_monster](/user/788202)
还是贴个代码吧(
注释的地方就是我改动的地方(
```cpp
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll M=1e5+1;
ll n,q,mod,x,y,k,num;
ll a[M];
struct tree{
ll date,l,r;
ll ts,tm;
}t[M<<2];
ll ls(ll p){
return p<<1;
}
ll rs(ll p){
return p<<1|1;
}
void push_up(ll p){
t[p].date=t[ls(p)].date+t[rs(p)].date;
t[p].date%=mod;//mod
}
void addt(ll p,ll add,ll mul){
t[p].date=t[p].date*mul%mod+(t[p].r-t[p].l+1)*add%mod;
t[p].date%=mod;//mod
t[p].tm*=mul%mod;
t[p].tm%=mod;//mod
t[p].ts=t[p].ts%mod*mul%mod+add%mod;
t[p].ts%=mod;//mod
}
void push_down(ll p){
addt(ls(p),t[p].ts,t[p].tm);
addt(rs(p),t[p].ts,t[p].tm);
t[p].ts=0,t[p].tm=1;
}
void build(ll p,ll l,ll r){
t[p].l=l,t[p].r=r,t[p].tm=1;
if(l==r){
t[p].date=a[l]%mod;//mod
return;
}
ll mid=(l+r)>>1;
build(ls(p),l,mid);
build(rs(p),mid+1,r);
push_up(p);
}
void update(ll p,ll l,ll r,ll w,ll flag){
if(t[p].l>=l&&t[p].r<=r){
if(!flag){//flag -> !flag
addt(p,w,1);
return;
}else{
addt(p,0,w);
return;
}
}
if(t[p].l!=t[p].r) push_down(p);
ll mid=(t[p].l+t[p].r)>>1;
if(l<=mid) update(ls(p),l,r,w,flag);
if(mid<r) update(rs(p),l,r,w,flag);
push_up(p);
}
ll query(ll p,ll l,ll r){
if(l<=t[p].l&&t[p].r<=r){
return t[p].date%mod;
}
push_down(p);
push_up(p);
ll mid=(t[p].l+t[p].r)>>1;
ll sum=0;
if(l<=mid) sum+=query(ls(p),l,r),sum%=mod;
if(mid<r) sum+=query(rs(p),l,r),sum%=mod;
return sum;
}
int main(){
scanf("%lld%lld%lld",&n,&q,&mod);
for(ll i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
for(ll i=1;i<=q;i++){
scanf("%lld%lld%lld",&num,&x,&y);
if(num==1){
scanf("%lld",&k);
update(1,x,y,k,1);
}else if(num==2){
scanf("%lld",&k);
update(1,x,y,k,0);
}else{
ll ans=query(1,x,y)%mod;
printf("%lld\n",ans);
}
}
return 0;
}
```
by MrcFrst_LRY @ 2023-07-19 11:48:50
@[lry_star](/user/600671)
!!!谢谢大佬,刚刚WA了7个点还在疑惑orz谢谢谢谢
by water_monster @ 2023-07-19 11:53:48
@[water_monster](/user/788202)
哦对刚看见您的数组开的是
$M=1e5+1$,感觉有点危险,建议您以后数组至少多开5到10,避免RE。
by MrcFrst_LRY @ 2023-07-19 11:57:58