Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define F first
  5. #define S second
  6.  
  7. using ll = long long;
  8. using pii = pair <int, int>;
  9.  
  10. const int oo = INT_MAX;
  11. const int SZ = 2e5 + 4;
  12.  
  13. struct node {
  14. ll val, add;
  15. node() : val(0), add(0) {}
  16. node(ll v) : val(v), add(0) {}
  17. };
  18.  
  19. int n, m, K;
  20. vector <node> st;
  21.  
  22. void read() {
  23. cin >> n >> m;
  24. K = 1; while (K < n) K *= 2;
  25. st.resize(2 * K, node());
  26. }
  27.  
  28. ll req(int l, int r, int ll = 0, int rr = K - 1, int v = 1) {
  29. if (r < ll || rr < l) return 0;
  30. if (l <= ll && rr <= r) return st[v].val + st[v].add;
  31. int m = (ll + rr) / 2;
  32. return req(l, r, ll, m, 2 * v) + req(l, r, m + 1, rr, 2 * v + 1);
  33. }
  34.  
  35. ll req1(int t, int ll = 0, int rr = K - 1, int v = 1) {
  36. if (ll == rr) return st[v].val + st[v].add;
  37. int m = (ll + rr) / 2;
  38. if (t <= m) return req1(t, ll, m, 2 * v) + st[v].add;
  39. else return req1(t, m + 1, rr, 2 * v + 1) + st[v].add;
  40. }
  41.  
  42. void upd(int val, int l, int r, int ll = 0, int rr = K - 1, int v = 1) {
  43. if (r < ll || rr < l) return;
  44. if (l <= ll && rr <= r) {
  45. st[v].add += val;
  46. return;
  47. }
  48. int m = (ll + rr) / 2;
  49. upd(val, l, r, ll, m, 2 * v);
  50. upd(val, l, r, m + 1, rr, 2 * v + 1);
  51. }
  52.  
  53. void solve() {
  54. while (m--) {
  55. int op, l, r, x;
  56. cin >> op >> l;
  57. if (op == 1) {
  58. cin >> r >> x;
  59. upd(x, l, r);
  60. } else cout << req1(l) << endl;
  61. }
  62. }
  63.  
  64. signed main() {
  65. ios::sync_with_stdio(0);
  66. cin.tie(0);
  67.  
  68. read();
  69. solve();
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement