ibrahim_065

HORRIBLE-spoj

Oct 12th, 2021
1,060
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.14 KB | None | 0 0
  1. //#include<bits/stdc++.h>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <cstdio>
  5. #include <cstdlib>
  6. #include <cstring>
  7. #include <string>
  8. #include <cmath>
  9. #include <vector>
  10. #include <set>
  11. #include <map>
  12. #include <unordered_set>
  13. #include <unordered_map>
  14. #include <stack>
  15. #include <queue>
  16. #include <deque>
  17. #include <iterator>
  18. #include <bitset>
  19. #include <assert.h>
  20. #include <new>
  21. #include <sstream>
  22. #include <time.h>
  23. #include <functional>
  24. #include <numeric>
  25. #include <utility>
  26. #include <limits>
  27. #define endl '\n'
  28. #define READ() freopen("input", "r", stdin)
  29. #define WRITE() freopen("output", "w", stdout)
  30. #define TIME() fprintf(stderr, "\nRuntime: %.10fs\n", (double)(clock() - tStart) / CLOCKS_PER_SEC)
  31. #define CLOCK() clock_t tStart = clock()
  32. #define pb push_back
  33. #define vStr vector<string>
  34. #define vi vector<int>
  35. #define vll vector<ll>
  36. #define vLL vector<ll>
  37. #define Mii map<int, int>
  38. #define Msi map<string, int>
  39. #define Mci map<c, int>
  40. #define ll long long int
  41. #define LL long long int
  42. #define ui unsigned int
  43. #define ull unsigned long long int
  44. #define FASTio                        \
  45.     ios_base::sync_with_stdio(false); \
  46.     cin.tie(NULL);
  47. using namespace std;
  48.  
  49. const ll MX = 1e5 + 5;
  50. struct segPropagation
  51. {
  52.     ll prop;
  53.     ll sum;
  54. };
  55. vector<segPropagation> segtree(4 * MX);
  56.  
  57. void update(ll node, ll start, ll end, ll i, ll j, ll value)
  58. {
  59.     if (i > end || j < start)
  60.         return;
  61.     if (i <= start && end <= j)
  62.     {
  63.         segtree[node].sum += ((end - start + 1) * value);
  64.         segtree[node].prop += value;
  65.         return;
  66.     }
  67.     ll left = node << 1;
  68.     ll right = left + 1;
  69.     ll mid = (start + end) >> 1;
  70.     update(left, start, mid, i, j, value);
  71.     update(right, mid + 1, end, i, j, value);
  72.     segtree[node].sum = segtree[left].sum + segtree[right].sum + (end - start + 1) * segtree[node].prop;
  73. }
  74.  
  75. ll query(ll node, ll start, ll end, ll i, ll j, ll carry = 0)
  76. {
  77.     if (i > end || j < start)
  78.         return 0;
  79.     if (i <= start && end <= j)
  80.         return segtree[node].sum + carry * (end - start + 1);
  81.     ll left = node << 1;
  82.     ll right = left + 1;
  83.     ll mid = (start + end) >> 1;
  84.     ll q1 = query(left, start, mid, i, j, carry + segtree[node].prop);
  85.     ll q2 = query(right, mid + 1, end, i, j, carry + segtree[node].prop);
  86.     return q1 + q2;
  87. }
  88.  
  89. int main()
  90. {
  91.  
  92.     //---------------------------code_start_from_here-------------------------
  93.  
  94.     FASTio;
  95.     ll t;
  96.     cin >> t;
  97.     while (t--)
  98.     {
  99.         ll n, q;
  100.         cin >> n >> q;
  101.         for (int i = 1; i <= n; i++)
  102.         {
  103.             segtree[i].sum = 0;
  104.             segtree[i].prop = 0;
  105.         }
  106.         ll a, b, c, d;
  107.         while (q--)
  108.         {
  109.             cin >> a;
  110.             if (a == 0)
  111.             {
  112.                 cin >> b >> c >> d;
  113.                 update(1, 1, n, b, c, d);
  114.             }
  115.             else
  116.             {
  117.                 cin >> b >> c;
  118.                 cout << query(1, 1, n, b, c) << endl;
  119.             }
  120.         }
  121.         // segtree.assign(n, {0, 0});
  122.     }
  123.     //---------------------------code_finished--------------------------------
  124.  
  125.     return 0;
  126. }
Advertisement
Add Comment
Please, Sign In to add comment