Cod sursa(job #2670559)

Utilizator As932Stanciu Andreea As932 Data 10 noiembrie 2020 10:50:06
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nMax = 100005;

int n, m;
int aib[nMax];

void update(int poz, int val){
    for(; poz <= n; poz += poz & -poz)
        aib[poz] += val;
}

int query(int poz){
    int ans = 0;

    for(; poz > 0; poz -= poz & -poz)
        ans += aib[poz];

    return ans;
}

int bs(int val){
    int idx = 0, interv;

    for(interv = 1; interv <= n; interv *= 2);

    for(; interv > 0; interv /= 2)
        if(idx + interv <= n)
            if(aib[idx + interv] <= val){
                idx += interv;
                val -= aib[idx];

                if(val == 0)
                    return idx;
            }

    return -1;
}

int main()
{
    fin >> n >> m;

    for(int i = 1; i <= n; i++){
        int x;

        fin >> x;

        update(i, x);
    }

    for(int i = 1; i <= m; i++){
        int op, a, b;

        if(op <= 1)
            fin >> a >> b;
        else
            fin >> a;

        if(!op)
            update(a, b);
        else if(op == 1)
            fout << query(b) - query(a - 1) << "\n";
        else
            fout << bs(a) << "\n";
    }

    return 0;
}