Cod sursa(job #3349085)

Utilizator moloDaniMolodet Andrei Daniel moloDani Data 25 martie 2026 13:32:59
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>

using namespace std;

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

const int mxN = 1e5 + 1;

unsigned int aib[mxN], n, m;

void update(int ind, unsigned val){
    for(int i = ind; i <= n; i += i & (-i))
        aib[i] += val;
}

unsigned int query(int ind){
    unsigned int ans = 0;
    while(ind){
        ans += aib[ind];
        ind -= ind & (-ind);
    }
    return ans;
}

int cautBin(unsigned int target){
    int mid, l = 1, r = n;
    unsigned int aux;
    while(l <= r){
        mid = (l + r) / 2;
        aux = query(mid);
        if(aux  == target) return mid;
        if(aux < target) l = mid + 1;
        else r = mid - 1;
    }

    return -1;
}

int main(){
    unsigned int aux;
    fin >> n >> m;
    for(int i = 1; i <= n; i++){
        fin >> aux;
        update(i, aux);
    }

    for(int i =1 ; i <= m; i++){
        unsigned int c, a, b;
        fin >> c >> a;
        if(c == 0){
            fin >> b;
            update(a, b);
        }else if(c == 1){
            fin >> b;
            fout << query(b) - query(a - 1) << "\n";
        }else{
            fout << cautBin(a) << "\n";
        }
    }
}