Advertisement
TheKabeton

Untitled

Nov 15th, 2020
839
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.20 KB | None | 0 0
  1. /*-------------------- Code written by Kabeton --------------------*/
  2. /*--- Contacts: https://vk.com/kabeton and TheKabeton@yandex.ru ---*/
  3.  
  4. #define _USE_MATH_DEFINES
  5. #include <iostream>
  6. #include <iomanip>
  7. #include <cstdio>
  8. #include <cstdlib>
  9. #include <cmath>
  10. #include <algorithm>
  11. #include <vector>
  12. #include <map>
  13. #include <unordered_map>
  14. #include <set>
  15. #include <bitset>
  16. #include <tuple>
  17. #include <queue>
  18. #include <stack>
  19. #include <valarray>
  20. #include <sstream>
  21. #include <cstring>
  22. #include <numeric>
  23. #include <ctime>
  24. #include <cassert>
  25.  
  26. #define endl "\n"
  27. #define re return
  28. #define fi first
  29. #define se second
  30.  
  31. typedef long long ll;
  32. typedef unsigned long long ull;
  33. typedef long double ld;
  34.  
  35. const ll mod = 1e9 + 7;
  36.  
  37. using namespace std;
  38.  
  39. vector<ll> d(4 * 100000);
  40.  
  41. void build(const vector<ll>& v, ll ind, ll left, ll right) {
  42.     if (left == right) {
  43.         d[ind] = v[left];
  44.     } else {
  45.         ll mid = (left + right) / 2;
  46.         build(v, ind * 2, left, mid);
  47.         build(v, ind * 2 + 1, mid + 1, right);
  48.         d[ind] = d[ind * 2] + d[ind * 2 + 1];
  49.     }
  50. }
  51.  
  52. ll sum(ll v, ll left, ll right, ll l, ll r) {
  53.     if (l > r) re 0;
  54.     if (left == l && right == r) re d[v];
  55.     ll mid = (left + right) / 2;
  56.     re sum(v*2, left, mid, l, min(r, mid)) +
  57.         sum(v*2 + 1, mid + 1, right, max(l, mid + 1), r);
  58. }
  59.  
  60. void update(ll v, ll left, ll right, ll pos, ll value) {
  61.     if (left == right) {
  62.         d[v] = value;
  63.     } else {
  64.         ll mid = (left + right) / 2;
  65.         if (pos <= mid) {
  66.             update(v * 2, left, mid, pos, value);
  67.         } else {
  68.             update(v * 2 + 1, mid + 1, right, pos, value);
  69.         }
  70.         d[v] = d[v * 2] + d[v * 2 + 1];
  71.     }
  72. }
  73.  
  74.  
  75.  
  76. int main() {
  77.     ios::sync_with_stdio(false);
  78.     cin.tie(nullptr);
  79.     cout.tie(nullptr);
  80.  
  81.     ll n, m;
  82.     cin >> n >> m;
  83.  
  84.     vector<ll> v(n);
  85.     for (auto &i : v) {
  86.         cin >> i;
  87.     }
  88.  
  89.     build(v, 1, 0, n - 1);
  90.  
  91.     for (int i = 0; i < m; ++i) {
  92.         ll a, b, c;
  93.         cin >> a >> b >> c;
  94.         if (a == 0) {
  95.             cout << sum(1, 0, n - 1, b - 1, c - 1) << endl;
  96.         } else {
  97.             update(1, 0, n - 1, b - 1, c);
  98.         }
  99.     }
  100.  
  101.     re 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement