fork download
  1. /*
  2. Cred : SunnyYeahBoi
  3. Currently Coding at school :>
  4. Problem :
  5. */
  6.  
  7. #include<bits/stdc++.h>
  8.  
  9. using namespace std;
  10.  
  11. #define int long long
  12. #define double long double
  13. #define endl "\n"
  14.  
  15. const int MAXN = 1000005;
  16. const int inf = 1e18;
  17. const int MOD = 1e9 + 7;
  18.  
  19. int pow_mod(int a , int b){
  20. a %= MOD;
  21.  
  22. if(b == 0) return 1;
  23. if(b == 1) return a;
  24.  
  25. int tmp = pow_mod(a , b / 2);
  26.  
  27. if(b % 2 == 0)
  28. return (tmp * tmp) % MOD;
  29. else return ((tmp * tmp) % MOD * a) % MOD;
  30. }
  31.  
  32. void Unique(vector<int>& a){
  33. sort(a.begin() , a.end());
  34. a.resize(distance(a.begin() , unique(a.begin() , a.end())));
  35. }
  36.  
  37. struct SegTree{
  38. int n;
  39. vector<int> tree , lazy;
  40.  
  41. void init(int x){
  42. n = x + 1;
  43. tree.resize(4 * n + 1 , 0);
  44. lazy.resize(4 * n + 1 , 0);
  45. }
  46.  
  47. void pushDown(int vt){
  48. int d = lazy[vt];
  49. lazy[vt] = 0;
  50.  
  51. tree[vt * 2] += d;
  52. tree[vt * 2 + 1] += d;
  53. lazy[vt * 2] += d;
  54. lazy[vt * 2 + 1] += d;
  55. }
  56.  
  57. void update(int vt , int l , int r , int u , int v , int k){
  58. if(u <= l && r <= v){
  59. tree[vt] += k;
  60. lazy[vt] += k;
  61. return;
  62. }
  63.  
  64. if(l > v || r < u) return;
  65.  
  66. int mid = (l + r) / 2;
  67.  
  68. pushDown(vt);
  69.  
  70. update(vt * 2 , l , mid , u , v , k);
  71. update(vt * 2 + 1 , mid + 1 , r , u , v , k);
  72.  
  73. tree[vt] = max(tree[vt * 2] , tree[vt * 2 + 1]);
  74. }
  75.  
  76. void update(int u , int v , int k){
  77. update(1 , 1 , n , u , v , k);
  78. }
  79.  
  80. int getMax(int vt , int l , int r , int u , int v){
  81. if(u <= l && r <= v) return tree[vt];
  82. if(l > v || r < u) return -inf;
  83.  
  84. int mid = (l + r) / 2;
  85. pushDown(vt);
  86.  
  87. return max(getMax(vt * 2 , l , mid , u , v) , getMax(vt * 2 + 1 , mid + 1 , r , u , v));
  88. }
  89.  
  90. int getMax(int l , int r){
  91. return getMax(1 , 1 , n , l , r);
  92. }
  93. };
  94.  
  95. int n , m;
  96.  
  97. void solve(){
  98. cin >> n >> m;
  99.  
  100. SegTree ST;
  101. ST.init(n);
  102.  
  103. while(m--){
  104. int op;
  105. cin >> op;
  106.  
  107. if(op == 0){
  108. int l , r, k;
  109. cin >> l >> r >> k;
  110. ST.update(l , r , k);
  111. }
  112.  
  113. if(op == 1){
  114. int l , r;
  115. cin >> l >> r;
  116. cout << ST.getMax(l , r) << endl;
  117. }
  118. }
  119. }
  120.  
  121. int32_t main(){
  122. // freopen(".INP" , "r" , stdin);
  123. // freopen(".OUT" , "w" , stdout);
  124. ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  125. solve();
  126. return 0;
  127. }
Success #stdin #stdout 0s 5324KB
stdin
Standard input is empty
stdout
Standard output is empty