Cod sursa(job #2947684)

Utilizator Radu_BicliBiclineru Radu Radu_Bicli Data 26 noiembrie 2022 16:34:34
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
#define Ub(x) (x & (-x))

using namespace std;

ifstream fin("aib.in");
ofstream fout("aib.out");
int n, q, c, i, a, b, Aib[100002], st, dr, mij;

void add(int poz, int val) {
    for(int i = poz; i <= n; i += Ub(i)) Aib[i] += val;
}

int sum(int poz) {
    int s = 0;
    for(int i = poz; i >= 1; i -= Ub(i)) s += Aib[i];
    return s;
}

int cb(int s) {
    st = 1;
    dr = n;
    while(st <= dr) {
        mij = (st + dr) / 2;
        if(sum(mij) < s) st = mij + 1;
        else dr = mij - 1;
    }
    if(sum(st) != s) return -1;
    else return st;
}

int main() {
    fin >> n >> q;
    for(i = 1; i <= n; i++) {
        fin >> a;
        add(i, a);
    }
    for(i = 1; i <= q; i++) {
        fin >> c;
        if(c == 0) {
            fin >> a >> b;
            add(a, b);
        }
        else if(c == 1) {
            fin >> a >> b;
            fout << sum(b) - sum(a - 1) << "\n";
        }
        else {
            fin >> a;
            fout << cb(a) << "\n";
        }
    }

    return 0;
}