fork download
  1. #include <bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. int n,q,m,a[1000006],st[4000006],lz[4000006];
  5. void UPDATE(int id, int l, int r, int u, int v, int x)
  6. {
  7. if (l>v || r<u) return;
  8. else if (l>=u && r<=v)
  9. {
  10. st[id]+=x*(r-l+1),lz[id]+=x;
  11. return;
  12. }
  13. int mid=(l+r)/2;
  14. st[id*2]+=lz[id]*(mid-l+1),lz[id*2]+=lz[id],st[id*2+1]+=(r-mid)*lz[id],lz[id*2+1]+=lz[id],lz[id]=0;
  15. UPDATE(id*2,l,mid,u,v,x),UPDATE(id*2+1,mid+1,r,u,v,x);
  16. st[id]=st[id*2]+st[id*2+1];
  17. }
  18. int GET(int id, int l, int r, int u, int v)
  19. {
  20. if (l>v || r<u) return 0;
  21. else if (l>=u && r<=v) return st[id];
  22. int mid=(l+r)/2;
  23. st[id*2]+=lz[id]*(mid-l+1),lz[id*2]+=lz[id],st[id*2+1]+=(r-mid)*lz[id],lz[id*2+1]+=lz[id],lz[id]=0;
  24. return GET(id*2,l,mid,u,v)+GET(id*2+1,mid+1,r,u,v);
  25. }
  26. signed main()
  27. {
  28. ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
  29. cin>>n>>q>>m;
  30. for (int i=1;i<=n;i++) cin>>a[i],UPDATE(1,1,n,i,i,a[i]);
  31. for (int i=1;i<=q;i++)
  32. {
  33. int t;
  34. cin>>t;
  35. if (t==1)
  36. {
  37. int l,r,x;
  38. cin>>l>>r>>x;
  39. UPDATE(1,1,n,l,r,x);
  40. }
  41. else
  42. {
  43. int l,r;
  44. cin>>l>>r;
  45. cout<<GET(1,1,n,l,r)%m<<'\n';
  46. }
  47. }
  48. return 0;
  49. }
Success #stdin #stdout 0s 5324KB
stdin
Standard input is empty
stdout
Standard output is empty