Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define MOD 1000000007;
- #define got cout<<"Yes\n"; return;
- #define got0 cout<<"Yes\n"; return 0;
- #define bhak cout<<"No\n"; return;
- #define bhak0 cout<<"No\n"; return 0;
- #define bas cout<<"\n";
- ll constructTree(ll ts, ll te, ll si, vector<ll> &tree, vector<ll> &vec){
- if(ts==te){
- return tree[si] = vec[ts];
- }
- ll mid = ts + (te-ts)/2;
- return tree[si] = constructTree(ts, mid, 2*si+1, tree, vec)
- +
- constructTree(mid+1, te, 2*si+2, tree, vec);
- }
- ll getSum(ll ts, ll te, ll rs, ll re, ll si, vector<ll> &tree){
- if(ts>=rs && te<=re){
- return tree[si];
- }
- if(ts==te){
- return 0;
- }
- ll mid = ts + (te-ts)/2;
- return getSum(ts, mid, rs, re, 2*si+1, tree)
- +
- getSum(mid+1, te, rs, re, 2*si+2, tree);
- }
- void update(ll ts, ll te, ll tar, ll pre, ll val, ll si, vector<ll> &tree){
- if(tar>=ts && tar<=te){
- tree[si] += val;
- tree[si] -= pre;
- }
- else{
- return;
- }
- if(ts==te){
- return;
- }
- ll mid = ts + (te-ts)/2;
- update(ts, mid, tar, pre, val, 2*si+1, tree);
- update(mid+1, te, tar, pre, val, 2*si+2, tree);
- }
- int main() {
- ll n, m; cin>>n>>m;
- vector<ll> vec(n);
- for(ll i=0; i<n; ++i) cin>>vec[i];
- vector<ll> tree(4*n, 0);
- constructTree(0, n-1, 0, tree, vec);
- while(m--){
- ll a, b, c;
- cin>>a>>b>>c;
- if(a==1){
- update(0, n-1, b, vec[b], c, 0, tree);
- vec[b] = c;
- }
- else if(a==2){
- // getSum(ll ts, ll te, ll rs, ll re, ll si, vector<ll> &tree){
- ll sum = getSum(0, n-1, b, c-1, 0, tree);
- cout<<sum; bas
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment