Advertisement
Guest User

Untitled

a guest
Jul 16th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll long long
  6.  
  7. //Дерево отрезков с обновлением на отрезке
  8. const int MAXN = (int)1e5 + 7;
  9.  
  10. ll t[4 * MAXN], add[4 * MAXN];
  11.  
  12. void update(int v, int lt, int rt, int L, int R, ll val) {
  13.     if (R < lt || L > rt) return;
  14.     if (L <= lt && rt <= R) {
  15.         t[v] += val * (rt - lt + 1);
  16.         add[v] += val;
  17.     } else {
  18.         int l = v * 2, r = l + 1;
  19.         int mt = (lt + rt) / 2;
  20.         update(l, lt, mt, L, R, val);
  21.         update(r, mt + 1, rt, L, R, val);
  22.         t[v] = t[l] + t[r] + add[v] * (rt - lt + 1);
  23.     }
  24. }
  25.  
  26. ll ask(int v, int lt, int rt, int L, int R, ll ad = 0) {
  27.     if (R < lt || L > rt) return 0;
  28.     if (L <= lt && rt <= R)   return t[v] + ad * (rt - lt + 1);
  29.     int l = v * 2, r = l + 1;
  30.     int mt = (lt + rt) / 2;
  31.     ll val = ask(l, lt, mt, L, R, ad + add[v]) + ask(r, mt + 1, rt, L, R, ad + add[v]);
  32.     return val;
  33. }
  34.  
  35. int main() {
  36.     int n, m;
  37.     cin >> n >> m;
  38.  
  39.     for (int i = 1; i <= m; i++) {
  40.         ll x;
  41.         cin >> x;
  42.         update(1, 1, m, i, i, x); //обновление в точке i, ну и это типа build
  43.     }
  44.  
  45.     //update(1, 1, m, l, r, v); - обновление на отрезке [l, r]
  46.     //s = ask(1, 1, m, i, j); - запрос на отрезке [i, j]
  47.     // нумерация, видимо, с единицы
  48.     return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement