Cod sursa(job #3337744)

Utilizator David_RadavoiRadavoi David Alexandru David_Radavoi Data 29 ianuarie 2026 18:54:59
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>

using namespace std;

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

#define NMAX 100000

int aib[NMAX + 1];
int N;

int lsb(int nr){
    return nr & (-nr);
}

void update(int poz, int val){
    for (int i = poz; i <= N; i += lsb(i)){
        aib[i] += val;
    }
}

int query(int poz){
    int rez = 0;
    for (int i = poz; i > 0; i -= lsb(i)){
        rez += aib[i];
    }
    return rez;
}

int cb(int k){
    int pas = (1 << 20), poz = 0;
    while (pas > 0){
        if (pas + poz <= N && aib[poz + pas] <= k){
            k -= aib[pas + poz];
            poz += pas;
        }
        pas >>= 1;
    }
    return poz;
}

int main()
{
    int M;
    fin >> N >> M;
    for (int i = 1; i <= N; i++){
        int nr;
        fin >> nr;
        update(i, nr);
    }
    for (int i = 1; i <= M; i++){
        int x;
        fin >> x;
        if (x == 0){
            int a, b;
            fin >> a >> b;
            update(a, b);
        }
        else if (x == 1){
            int a, b;
            fin >> a >> b;
            fout << query(b) - query(a - 1) << '\n';
        }
        else{
            int a;
            fin >> a;
            fout << cb(a) << '\n';
        }
    }
    return 0;
}