这题写完后总是
听取WA声一片
请问我的代码是哪里有问题,个人查了40分钟也没找出来,谢谢各位大佬了
#include<bits/stdc++.h>
using namespace std;
#define luo_xing main
typedef long long ll;
const ll N=1e5+7;
ll n,q,mod;
ll f[N*4],tag[N*4],kag[N*4];
void pu(ll k){
f[k]=f[k*2]+f[k*2+1];
f[k]%=mod;
return;
}
void build(ll k,ll l,ll r){
kag[k]=1;
if(l==r){
cin>>f[k];
f[k]%=mod;
return;
}
ll mid=(l+r)>>1;
build(k*2,l,mid);
build(k*2+1,mid+1,r);
pu(k);
return;
}
//void d(ll k,ll l,ll r,ll p){
// f[k]=f[k]+(r-l+1)*p;
// tag[k]+=p;
// f[k]%=mod;
// tag[k]%=mod;
// return;
//}
//void ka(ll k,ll p){
// f[k]*=p;
// kag[k]*=p;
// f[k]%=mod;
// kag[k]%=mod;
// return;
//}
void pd(ll k,ll l,ll r,ll mid){
f[k*2]=(f[k*2]*kag[k]+tag[k]*(mid-l+1))%mod;
f[k*2+1]=(f[k*2+1]*kag[k]+tag[k]*(r-mid))%mod;
kag[k*2]=(kag[k*2]*kag[k])%mod;
kag[k*2+1]=(kag[k*2+1]*kag[k])%mod;
tag[k*2]=(tag[k*2]*kag[k]+tag[k])%mod;
tag[k*2+1]=(tag[k*2+1]*kag[k]+tag[k])%mod;
tag[k]=0;
kag[k]=1;
return;
}
void cck(ll k,ll l,ll r,ll x,ll y,ll v){
if(l>y || r<x) return;
if(l>=x && r<=y){
f[k]*=v;
kag[k]*=v;
f[k]%=mod;
kag[k]%=mod;
return;
}
ll mid=(l+r)>>1;
pd(k,l,r,mid);
cck(k*2,l,mid,x,y,v);
cck(k*2+1,mid+1,r,x,y,v);
pu(k);
return;
}
void cak(ll k,ll l,ll r,ll x,ll y,ll v){
if(l>y || r<x) return;
if(l>=x && r<=y){
f[k]+=(r-l+1)*v;
tag[k]+=v;
f[k]%=mod;
tag[k]%=mod;
return;
}
ll mid=(l+r)>>1;
pd(k,l,r,mid);
cak(k*2,l,mid,x,y,v);
cak(k*2+1,mid+1,r,x,y,v);
pu(k);
return;
}
ll ask(ll k,ll l,ll r,ll x,ll y){
if(l>y || r<x) return 0;
if(l>=x && r<=y){
return f[k]%mod;
}
ll mid=(l+r)>>1,s=0;
pd(k,l,r,mid);
s+=ask(k*2,l,mid,x,y);
s+=ask(k*2+1,mid+1,r,x,y);
pu(k);
return s%mod;
}
int luo_xing(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>q>>mod;
build(1,1,n);
ll op,x,y,v;
while(q--){
cin>>op>>x>>y;
if(op==3){
cout<<ask(1,1,n,x,y)%mod<<'\n';
}else if(op==2){
cin>>v;
cak(1,1,n,x,y,v);
}else{
cin>>v;
cck(1,1,n,x,y,v);
}
// for(int i=1;i<=n*4;i++) cout<<f[i]<<' ';
// cout<<endl;
}
return 0;
}