Advertisement
Guest User

Untitled

a guest
Aug 24th, 2021
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.74 KB | None | 0 0
  1. // ▄███████▄ ▄████████ ▄████████ ▄█ ▄█▄ # ▄█ █▄ ▄████████ ▄████████
  2. // ███ ███ ███ ███ ███ ███ ███ ▄███▀ ███ ███ ███ ███ ███ ███
  3. // ███ ███ ███ ███ ███ ███ ███▐██▀ ███ ███ ███ ███ ███ ███
  4. // ███ ███ ▄███▄▄▄▄██▀ ███ ███ ▄█████▀ ▄███▄▄▄▄███▄▄ ███ ███ ▄███▄▄▄▄██▀
  5. // ▀█████████▀ ▀▀███▀▀▀▀▀ ▀███████████ ▀▀█████▄ ▀▀███▀▀▀▀███▀ ▀███████████ ▀▀███▀▀▀▀▀
  6. // ███ ▀███████████ ███ ███ ███▐██▄ ███ ███ ███ ███ ▀███████████
  7. // ███ ███ ███ ███ ███ ███ ▀███▄ ███ ███ ███ ███ ███ ███
  8. // ▄████▀ ███ ███ ███ █▀ ███ ▀█▀ ███ █▀ ███ █▀ ███ ███
  9. // ███ ███ ▀ ███ ███
  10.  
  11.  
  12. // ▄█ ▄████████ ▄█ ▄████████ ███▄▄▄▄
  13. // ███ ███ ███ ███ ███ ███ ███▀▀▀██▄
  14. // ███ ███ ███ ███ ███ ███ ███ ███
  15. // ███ ███ ███ ███ ███ ███ ███ ███
  16. // ███ ▀███████████ ███ ▀███████████ ███ ███
  17. // ███ ███ ███ ███ ███ ███ ███ ███
  18. // ███ ███ ███ ███▌ ▄ ███ ███ ███ ███
  19. // █▄ ▄███ ███ █▀ █████▄▄██ ███ █▀ ▀█ █▀
  20. // ▀▀▀▀▀▀ ▀
  21.  
  22. #include<bits/stdc++.h>
  23. using namespace std;
  24.  
  25.  
  26. //#include<ext/pb_ds/assoc_container.hpp>
  27. //#include<ext/pb_ds/tree_policy.hpp>
  28. //#include<ext/pb_ds/trie_policy.hpp>
  29. //using namespace __gnu_pbds;
  30. //typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
  31. //typedef trie<string,null_type,trie_string_access_traits<>,pat_trie_tag,trie_prefix_search_node_update> Trie;
  32.  
  33.  
  34. #define fo(i,n) for(int i=0;i<n;i++)
  35. #define rfo(i,n) for(int i=n-1;i>=0;i--)
  36. #define fo1(i,n) for(int i=1;i<=n;i++)
  37. #define rfo1(i,n) for(int i=n;i>0;i--)
  38. #define pii pair<int,int>
  39. #define fast ios_base::sync_with_stdio(false);cin.tie(NULL);
  40. #define all(v) v.begin(),v.end()
  41. #define vi vector<int>
  42. #define mii map<int,int>
  43. #define mivi map<int,vector<int>>
  44. #define int long long
  45. #define tc int testcases;cin>>testcases;while(testcases--)
  46. #define setbits(x) __builtin_popcountll(x)
  47. #define zerobits(x) __builtin_ctzll(x)
  48. #define fill(x,y) memset(x,y,sizeof(x))
  49. #define f(i,container) for(auto &i:container)
  50.  
  51. void shift(int si,vector<vi>&segtree)
  52. {
  53. int temp=segtree[si][2];
  54. segtree[si][2]=segtree[si][1];
  55. segtree[si][1]=segtree[si][0];
  56. segtree[si][0]=temp;
  57.  
  58. }
  59. void build(vi &v,vector<vi> &segtree,int ss,int se,int si)
  60. {
  61. if(ss==se)
  62. {
  63. segtree[si][0]++;
  64. return;
  65. }
  66. int m=(ss+se)/2;
  67. build(v,segtree,ss,m,2*si);
  68. build(v,segtree,m+1,se,2*si+1);
  69. segtree[si][0]=segtree[2*si][0]+segtree[2*si+1][0];
  70.  
  71.  
  72. }
  73. void update(vector<vi>&segtree,vi &lazy,int ss,int se,int si,int qs,int qe)
  74. {
  75. if(lazy[si]!=0)
  76. {
  77. int add=lazy[si];
  78. lazy[si]=0;
  79. if(ss!=se) lazy[2*si]+=add,lazy[2*si+1]+=add;
  80. add=add%3;
  81. fo(i,add) shift(si,segtree);
  82. }
  83. if(ss>qe or se<qs) return;
  84. if(ss>=qs && se<=qe)
  85. {
  86. shift(si,segtree);
  87. if(ss!=se) lazy[2*si]++,lazy[2*si+1]++;
  88. return;
  89. }
  90. int m=(ss+se)/2;
  91. update(segtree,lazy,ss,m,2*si,qs,qe);
  92. update(segtree,lazy,m+1,se,2*si+1,qs,qe);
  93. segtree[si][0]=segtree[2*si][0]+segtree[2*si+1][0];
  94. segtree[si][1]=segtree[2*si][1]+segtree[2*si+1][1];
  95. segtree[si][2]=segtree[2*si][2]+segtree[2*si+1][2];
  96.  
  97.  
  98. }
  99. int query(vector<vi>&segtree,vi lazy,int ss,int se,int si,int qs,int qe)
  100. {
  101.  
  102.  
  103.  
  104. if(lazy[si]!=0)
  105. {
  106. int add=lazy[si];
  107. lazy[si]=0;
  108. if(ss!=se) lazy[2*si]+=add,lazy[2*si+1]+=add;
  109. add=add%3;
  110. fo(i,add) shift(si,segtree);
  111. }
  112. if(ss>qe or se<qs) return 0;
  113. if(ss>=qs && se<=qe) return segtree[si][0];
  114. int m=(ss+se)/2;
  115. int left=query(segtree,lazy,ss,m,2*si,qs,qe);
  116. int right=query(segtree,lazy,m+1,se,2*si+1,qs,qe);
  117.  
  118. return left+right;
  119.  
  120. }
  121. signed main()
  122. {
  123. fast
  124. #ifndef ONLINE_JUDGE
  125. freopen("input.txt", "r", stdin);
  126. freopen("output.txt", "w", stdout);
  127. #endif
  128.  
  129. int n,q;
  130. cin>>n>>q;
  131. vi lazy(4*n,0);
  132. vector<vi> segtree(4*n,vi (3,0));
  133.  
  134. vi v(n,0);
  135. build(v,segtree,0,n-1,1);
  136. while (q--)
  137. {
  138. int type,a,b;
  139. cin>>type>>a>>b;
  140. if(type)
  141. {
  142. cout<<query(segtree,lazy,0,n-1,1,a,b)<<"\n";
  143. }
  144. else update(segtree,lazy,0,n-1,1,a,b);
  145. }
  146.  
  147.  
  148.  
  149.  
  150. return 0;
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement