fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. #define int long long
  5. int n, st[400400], m, q;
  6.  
  7. void update(int id, int l, int r, int u, int v, int val) {
  8. if (v < l || r < u) return;
  9. if (u <= l && r <= v) {
  10. st[id] += val;
  11. return;
  12. }
  13.  
  14. int mid = (l + r) / 2;
  15. update(id*2, l, mid, u, v, val);
  16. update(id*2+1, mid+1, r, u, v, val);
  17. st[id] = max(st[id*2], st[id*2+1]);
  18. }
  19.  
  20. int get(int id, int l, int r, int u, int v) {
  21. if (v < l || r < u) return -999999999999;
  22. if (u <= l && r <= v) {
  23. return st[id];
  24. }
  25.  
  26. int mid = (l + r) / 2;
  27. return max(get(id*2, l, mid, u, v), get(id*2+1, mid+1, r, u, v));
  28. }
  29.  
  30. int32_t main() {
  31. // your code goes here
  32. cin >> n >> m;
  33. while (m--) {
  34. int type;
  35. cin >> type;
  36. if (type == 1) {
  37. int l, r; cin >> l >> r;
  38. cout << get(1, 1, n, l, r) << '\n';
  39. continue;
  40. }
  41. int l, r, k;
  42. cin >> l >> r >> k;
  43. update(1, 1, n, l, r, k);
  44. }
  45. return 0;
  46. }
Success #stdin #stdout 0s 5400KB
stdin
6 3
0 1 3 3
0 4 6 4
1 1 6
stdout
4