Cod sursa(job #3330104)

Utilizator ceezarGrecu Cezar Gabriel ceezar Data 17 decembrie 2025 16:38:05
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <iostream>



using namespace std;



int aib[100001], n;

void Update(int pos, int val) {
    for (; pos <= n; pos += (pos & -pos))
        aib[pos] += val;
}

int Sum(int pos) {
    int s = 0;
    for (; pos > 0; pos -= (pos & - pos))
        s += aib[pos];
    return s;
}

int Query2(int val) {
    int st = 1, dr = n, ans = -1;
    while (st <= dr) {
        int mij = (st + dr) / 2;
        int x = Sum(mij);
        if (x > val)
            dr = mij - 1;
        else if (x < val)
            st = mij + 1;
        else {
            ans = mij;
            dr = mij - 1;
        }
    }
    return ans;
}

void Read() {
    int q;
    ifstream fin ("aib.in");
    ofstream fout ("aib.out");
    fin >> n >> q;
    for (int i = 1; i <= n; i++) {
        int val;
        fin >> val;
        Update(i, val);
    }
    for (int i = 1; i <= q; i++) {
        int x, y, op;
        fin >> op >> x;
        if (op < 2) {
            fin >> y;
            if (op == 0) Update(x, y);
            else fout << Sum(y) - Sum(x - 1) << "\n";
        }
        else fout << Query2(x) << "\n";
    }
}

int main() {
    Read();
    return 0;
}