Cod sursa(job #3337587)

Utilizator MrPetcuPetcu Robert MrPetcu Data 28 ianuarie 2026 21:57:46
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("datorii.in");
ofstream fout ("datorii.out");

int arbore[100000+5], n, m, x, q, l, r;

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

int query(int l, int r, int nod, int st, int dr){
    if (l <= st && dr <= r){
        return arbore[nod];
    }
    int mij = (st + dr) / 2;
    int x = 0, y = 0;
    if (l <= mij){
        x = query(l, r, nod*2, st, mij);
    }
    if (r >= mij+1){
        y=query(l, r, nod*2+1, mij+1, dr);
    }
    return x + y;
}

int main(){
    fin >> n >> m;
    for (int i=1;i<=n;i++){
        fin>>x;
        update(x, i, 1, 1, n);
    }
    for(int i = 1; i <= m; i++){
        fin>>q>>l>>r;
        if(q == 0){
            update(-r, l, 1, 1, n);
        }
        else{
            fout << query(l,r,1,1,n) << '\n';
        }
    }
    return 0;
}