你谷日爆
by EvilSpirits @ 2020-11-07 10:13:06
递归函数没return,没取模,没开long long...
by sipu6174 @ 2020-11-07 10:21:22
@[garbage2](/user/104380)
by sipu6174 @ 2020-11-07 10:21:40
别用不带优化的cin
by sipu6174 @ 2020-11-07 10:23:44
@[garbage2](/user/104380)
```cpp
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct tree{
int l,r;
int v;
int f1,f2;
}a[8*100000+5];
int p;
int x,y;
long long ans;
void init(int l,int r,int s)
{
a[s].l=l,a[s].r=r;
a[s].f1=0;
a[s].f2=1;
if(l==r){
cin>>a[s].v;
return ;
}
int m=(l+r)/2;
init(l,m,2*s);
init(m+1,r,2*s+1);
a[s].v=a[2*s].v+a[2*s+1].v;
a[s].v%=p;
}
void down(int s)
{
int fa=a[s].f1,fm=a[s].f2;
if(fa==0&&fm==1) return;
a[2*s].v=a[2*s].v*fm+fa*(a[2*s].r-a[2*s].l+1);
a[2*s].v%=p;
a[2*s+1].v=a[2*s+1].v*fm+fa*(a[2*s+1].r-a[2*s+1].l+1);
a[2*s+1].v%=p;
////
a[2*s].f2=(a[2*s].f2*fm)%p;
a[2*s+1].f2=(a[2*s+1].f2*fm)%p;
a[2*s].f1=(a[2*s].f1*fm+fa)%p;
a[2*s+1].f1=(a[2*s+1].f1*fm+fa)%p;
a[s].f1=0;
a[s].f2=1;
}
void jia(int s,int v)
{
int l=a[s].l,r=a[s].r;
if(x<=l&&r<=y){
a[s].v+=v*(r-l+1);
a[s].v%=p;
a[s].f1+=v;
a[s].f1%=p;
return;
}
down(s);
int m=(l+r)/2;
if(x<=m)
jia(2*s,v);
if(y>m)
jia(2*s+1,v);
a[s].v=(a[2*s].v+a[2*s+1].v)%p;
}
void chen(int s,int v)
{
int l=a[s].l,r=a[s].r;
if(x<=l&&r<=y){
a[s].v=(a[s].v*v)%p;
a[s].f1=(a[s].f1*v)%p;
a[s].f2=(a[s].f2*v)%p;
return;
}
down(s);
int m=(l+r)/2;
if(x<=m)
chen(2*s,v);
if(y>m)
chen(2*s+1,v);
a[s].v=(a[2*s].v+a[2*s+1].v)%p;
}
void he(int s)
{
int l=a[s].l,r=a[s].r;
if(x<=l&&r<=y){
ans+=a[s].v;
ans%=p;
return;
}
down(s);
int m=(l+r)/2;
if(x<=m)
he(2*s);
if(y>m)
he(2*s+1);
}
signed main()
{
int n,m;
cin>>n>>m>>p;
init(1,n,1);
int i;
for(i=1;i<=m;i++){
int op,v;
cin>>op>>x>>y;
if(op==1){
cin>>v;
chen(1,v);
}
if(op==2){
cin>>v;
jia(1,v);
}
if(op==3){
ans=0;
he(1);
cout<<ans%p<<endl;
}
}
return 0;
}
```
by sipu6174 @ 2020-11-07 10:34:43
@[sipu6174](/user/239832) 已解决,谢谢!
~~话说这个`long long`好烦人~~
by garbage2 @ 2020-11-07 11:45:36