Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. long long int t[4*10000];
  6.  
  7. long long int sum (int v, int tl, int tr, int l, int r) {
  8. if (l > r)
  9. return 0;
  10. if (l == tl && r == tr)
  11. return t[v];
  12. int tm = (tl + tr) / 2;
  13. return sum (v*2+1, tl, tm, l, min(r,tm))
  14. + sum (v*2+2, tm+1, tr, max(l,tm+1), r);
  15. }
  16.  
  17. void add(int v, int tl, int tr, int l, int r, int add) {
  18. if (l > r)
  19. return;
  20. if (l == tl && tr == r)
  21. t[v] += add;
  22. else {
  23. int tm = (tl + tr) / 2;
  24. update (v*2+1, tl, tm, l, min(r,tm), add);
  25. update (v*2+2, tm+1, tr, max(l,tm+1), r, add);
  26. }
  27. }
  28.  
  29. int main()
  30. {
  31. int N, M;
  32. scanf("%d%d", &N, &M);
  33.  
  34. for(int i = 0; i < 4*N-1; i++)
  35. t[i] = 0;
  36.  
  37. int l, r, val, command_type;
  38. for(int i = 0; i < M; i++){
  39. cin >> command_type;
  40. if (command_type == 1){
  41. cin >> l >> r >> val;
  42. update(0, 0, 4*N-1, l, r, val);
  43. }else if (command_type == 2){
  44. cin >> l >> r;
  45. cout << sum(0, 0, 4*N-1, l, r) << endl;
  46. }else{
  47. for(int i = 0; i < 4*N-1; i++)
  48. cout << t[i] << " ";
  49. cout << endl;
  50. }
  51. }
  52. return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement