Advertisement
Guest User

HORRIBLE - Horrible Queries

a guest
Sep 21st, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define pi acos(-1.0)
  4. #define pb push_back
  5. #define vi vector<int>
  6. #define mapii map<int , int>
  7. #define mapci map<char, int>
  8. #define mapsi map<string,int>
  9. #define FOR(i,n) for(int i = 0;i<n;i++)
  10. #define CP(n) printf("Case %d: \n",n);
  11. using namespace std;
  12. ll tree[3000005],prop[3000005];
  13. void update(int node,int l,int r,int a,int b,int x)
  14. {
  15. if(l>b || r<a)
  16. return;
  17. if(l>=a && r<=b)
  18. {
  19. tree[node] += ((r - l) + 1)*x;
  20. prop[node]+=x;
  21. return;
  22. }
  23. int mid = (l+r)/2;
  24. int left = node * 2;
  25. int right = left +1;
  26. update(left,l,mid,a,b,x);
  27. update(right,mid+1,r,a,b,x);
  28. tree[node] = tree[left]+tree[right]+((r - l)+1)*prop[node];
  29. }
  30. ll query(int node,int l,int r,int a,int b,int c = 0)
  31. {
  32. if(l>b || r<a)
  33. return 0;
  34. if(l>=a && r<=b)
  35. return tree[node]+((r - l)+ 1 )*c;
  36.  
  37. int mid = (l+r)/2;
  38. int left = node * 2;
  39. int right = left + 1;
  40. ll x = query(left,l,mid,a,b,c+prop[node]);
  41. ll y = query(right,mid+1,r,a,b,c+prop[node]);
  42. return x + y;
  43. }
  44. int main()
  45. {
  46. ios_base::sync_with_stdio(false);
  47. cin.tie(0);
  48. int t;
  49. cin>>t;
  50. while(t--)
  51. {
  52. int n,c;
  53. memset(tree,0,sizeof tree);
  54. memset(prop,0,sizeof prop);
  55. cin>>n>>c;
  56. while(c--)
  57. {
  58. int choice,a,b,u;
  59. cin>>choice;
  60. if(choice)
  61. {
  62. // cout<<"dhukse 1"<<endl;
  63. cin>>a>>b;
  64. cout<<query(1,1,n,a,b)<<endl;
  65. }
  66. else
  67. {
  68. // cout<<"dhukse 2"<<endl;
  69. cin>>a>>b>>u;
  70. update(1,1,n,a,b,u);
  71. // cout<<"bair hois"<<endl;
  72. }
  73. //cout<<"dhukse"<<endl;
  74. }
  75. }
  76. return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement