Cod sursa(job #2852799)

Utilizator VladTZYVlad Tiganila VladTZY Data 19 februarie 2022 16:20:36
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>

#define NMAX 100005

using namespace std;

ifstream f("aib.in");
ofstream g("aib.out");

int n, questions, type, x, a, b;
int aib[NMAX];

void updateAIB(int poz, int val) {

    for (int i = poz; i <= n; i = i + (i & -i))
        aib[i] = aib[i] + val;
}

int queryAIB(int poz) {
    int answer = 0;

    for (int i = poz; i >= 1; i = i - (i & -i))
        answer = answer + aib[i];

    return answer;
}

int binarySearch(int val) {
    int st = 1;
    int dr = n;

    while (st <= dr) {
        int mij = (st + dr) / 2;
        int aibVal = queryAIB(mij);

        if (aibVal == val)
            return mij;

        if (aibVal > val)
            dr = mij - 1;
        else
            st = mij + 1;
    }

    return -1;
}

int main()
{
    f >> n >> questions;
    for (int i = 1; i <= n; i++) {
        f >> x;

        updateAIB(i, x);
    }

    while (questions--) {
        f >> type;

        if (type == 0) {
            f >> a >> b;

            updateAIB(a, b);
        }

        if (type == 1) {
            f >> a >> b;

            g << queryAIB(b) - queryAIB(a - 1) << "\n";
        }

        if (type == 2) {
            f >> x;

            g << binarySearch(x) << "\n";
        }
    }

    return 0;
}