Cod sursa(job #2998725)

Utilizator mati.coldea@gmail.comMatei Coldea [email protected] Data 9 martie 2023 21:44:33
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int A[100005];
int n, q;
long long query(int p) {
    long long 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) {


    while (st <= dr) {
        int mij = (st + dr) / 2;
        int aux = query(mij);

        if (aux == val) {
            return mij;
        }
        else if(aux>val) {
            dr = mij;
        }
        else {
            st = mij + 1;
        }
    }
    return -1;

}




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();

}