Cod sursa(job #3165046)

Utilizator PsyDuck1914Feraru Rares-Serban PsyDuck1914 Data 5 noiembrie 2023 12:32:03
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f ("datorii.in");
ofstream g ("datorii.out");

const int NMAX = 1e5;
int aint[4*NMAX+4];

void update(int nod, int st, int dr, int idx, int val){
    if(st == dr){
        aint[nod] += val;
        return;
    }
    
    int mij = (st + dr)/2;
    
    if(idx <= mij)
        update(2*nod, st, mij, idx, val);
        
    if(idx > mij)
        update(2*nod+1, mij+1, dr, idx, val);
        
    aint[nod] = aint[2*nod] + aint[2*nod+1];
}

int query(int nod, int st, int dr, int sti, int dri){
    if(sti == st and dri == dr)
        return aint[nod];
    int mij = (st + dr)/2;
    if(dri <= mij)
        return query(2*nod, st, mij, sti, dri);
    if(sti > mij)
        return query(2*nod+1, mij+1, dr, sti, dri);
    return (
        query(2*nod, st, mij, sti, mij) +
        query(2*nod+1, mij+1, dr, mij+1, dri)
    );
}

int main()
{
    int n, q;
    f >> n >> q;
    for(int i=1; i<=n; i++){
        int val;
        f >> val;
    
        update(1, 1, n, i, val);
    }
    for(int i=1; i<=q; i++){
        int t, x, y;
        f >> t >> x >> y;
        if(t == 0){
            update(1, 1, n, x, -y);
        }else g << query(1, 1, n, x, y) << "\n";
    }

    return 0;
}