Cod sursa(job #2392132)

Utilizator MarianConstantinMarian Constantin MarianConstantin Data 29 martie 2019 18:24:57
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>

using namespace std;

const int MAXN = 1e6;

ifstream fin("aib.in");
ofstream fout("aib.out");

int tree[MAXN + 10], n, m;

void add(int ind, int val) {
    int i = ind;
    while (i <= n) {
        tree[i] += val;
        i += (i & (-i));
    }
}

int sum(int ind) {
    if (ind < 1)
        return 0;
    return tree[ind] + sum(ind - (ind & (-ind)));
}

int find(int val) {
    for (int i = 1; i <= n; ++i)
        if (sum(i) == val)
            return i;
}

int main() {
    int p, x, y;;
    fin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        fin >> x;
        add(i, x);
    }
    for (int i = 1; i <= m; ++i) {
        fin >> p;
        if (p == 0) {
            fin >> x >> y;
            add(x, y);
        }
        else if (p == 1) {
            fin >> x >> y;
            fout << sum(y) - sum(x - 1) << "\n";
        }
        else {
            fin >> x;
            fout << find(x) << "\n";
        }
    }
    return 0;
}