Cod sursa(job #2910703)

Utilizator matwudemagogul matwu Data 24 iunie 2022 14:40:50
Problema Datorii Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2 kb
/*
---------------------------
\/\/\/\\\///\\/\/\/\/\/\/\
 \ / \ / \ / \ / \ / \ / \
 | | | | | | | | | | | | |
 | | | | | | | | | | | | |
 \ / \ / \ / \ / \ / \ / \
\/\/\/\\\///\\/\/\/\/\/\/\
 -------------------------

Secretul e să taci când nu știi ce vrei să vorbești
Nu încerca să pari altcineva când nu știi cine ești
Nu înceta să visezi, e gratis, n-ai ce să pierzi
Să nu crezi în destin, că în timp te plafonezi
*/

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, q;
vector<int> v(15001), t(45001);
ifstream fin("datorii.in");
ofstream fout("datorii.out");
void build(vector<int>& a, int v, int tl, int tr){

    if(tl == tr) t[v] = a[tl];
    else{
        int tm = (tl + tr) / 2;
        build(a, v * 2, tl, tm);
        build(a, v * 2 + 1, tm + 1, tr);

        t[v] = t[v * 2] + t[v * 2 + 1];
    }
}

void update(int v, int tl, int tr, int pos, int val){
    if(tl == tr) t[v] -= val;
    else{
        int tm = (tl + tr) / 2;
        if(pos <= tm) update(v * 2, tl, tm, pos, val);
        else update(v * 2 + 1, tm + 1,tr, pos, val);

        t[v] = t[v * 2] + t[v * 2 + 1];
    }
}

int query(int v, int tl, int tr, int l, int r){

    if(l <= tl && r >= tr) return t[v];
    if(tr < l || tl > r) return 0;
    else{
        int tm = (tl + tr) / 2;
        int sum1 = query(v * 2, tl, tm, l, r);
        int sum2 = query(v * 2 + 1, tm + 1, tr, l, r);

        return sum1 + sum2;
    }
}
int32_t main(){

	ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);

    fin >> n >>  q;
    for(int i = 1; i <= n; i++)
        fin >> v[i];
    
    build(v, 1, 1, n);
    while(q--){
        int task;
        fin >> task;

        if(task == 0){
            int pos, val;
            fin >> pos >> val;
            update(1, 1, n, pos, val);
        }
        else{
            int l, r;
            fin >> l >> r;
            fout << query(1, 1, n, l, r) << '\n';
        }
    }

}