全RE求助

P3373 【模板】线段树 2

你谷日爆
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


|