Cod sursa(job #2988587)

Utilizator mati.coldea@gmail.comMatei Coldea [email protected] Data 4 martie 2023 22:36:28
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
//aib (infoarena)
#include <bits/stdc++.h>

using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int A[1000];
int n, q;
int query(int p) {
    int suma = 0;
    for (int i = p; i; i -= (i & -i)) {
        suma += A[i];
    }
    return suma;

}

void update(int p, int val) {

    for (int i = p; i <= n; i += (i & -i)) {
        A[i] += val;
    }


}

int cb(int st, int dr, int val) {


    int mij = (st + dr) / 2;
    int aux = query(mij);
    if (aux == val) {
        return mij;
    }
    else  if (aux > val) {
        return cb(st, mij, val);
    }
    else if (aux < val) {
        return cb(mij + 1, dr, val);
    }


}




int main()
{
    fin >> n >> q;
    int aux;
    for (int i = 1; i <= n; i++) {
        fin >> aux;
        update(i, aux);
    }
    int pos, val, a, b;
    for (int i = 1; i <= q; i++) {
        int t;
        fin >> t;
        if (t == 0) {
            fin >> pos >> val;
            update(pos, val);
        }
        else if (t == 1) {
            fin >> a >> b;
            fout << query(b) - query(a - 1) << '\n';
        }
        else if (t == 2) {
            fin >> a;

            fout << cb(1, n, a) << '\n';

        }
    }




    fin.close();
    fout.close();

}