Cod sursa(job #3182956)

Utilizator Radu_MocanasuMocanasu Radu Radu_Mocanasu Data 10 decembrie 2023 12:30:49
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n;
int v[100005];
int aib[100005];
void update(int poz, int val){
    for(; poz <= n; poz += poz & -poz) aib[poz] += val;
}
int query(int poz){
    int s = 0;
    for(; poz >= 1; poz -= poz & -poz) s += aib[poz];
    return s;
}
int cb(int x){
    int st = 1, dr = n, med;
    while(st <= dr){
        med = (st + dr) >> 1;
        int e = query(med);
        if(e == x) return med;
        else if(e < x) st = med + 1;
        else dr = med - 1;
    }
    return -1;
}
int main()
{
    int q,i,j,c,a,b;
    fin >> n >> q;
    for(i = 1; i <= n; i++){
        fin >> v[i];
        update(i, v[i]);
    }
    for(i = 1; i <= q; i++){
        fin >> c;
        if(c == 0){
            fin >> a >> b;
            update(a,b);
        }
        else if(c == 1){
            fin >> a >> b;
            fout << query(b) - query(a - 1) << "\n";
        }
        else{
            fin >> a;
            fout << cb(a) << "\n";
        }
    }

    return 0;
}