Cod sursa(job #2159580)

Utilizator mrhammerCiocan Cosmin mrhammer Data 11 martie 2018 01:17:43
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m;
std::vector<int> btree;
void update_b_tree(int pos,int val)
{
    while(pos <= n)
    {
        btree[pos] += val;
        pos = pos+(pos&(-pos));
    }
}
int get_sum(int y)
{
    int s = 0;
    while(y > 0)
    {
        s += btree[y];
        y -= y&(-y);
    }
    return s;
}
int get_sum_big(int x,int y)
{
    return get_sum(y)-get_sum(x-1);
}
int main()
{
    fin>>n>>m;
    btree.assign(n+1,0);
    int k1;
    for(int i=0;i<n;i++)
    {
        fin>>k1;
        update_b_tree(i+1,k1);
    }
    for(int i=0;i<m;i++)
    {
        int k2,k3;
        fin>>k1>>k2;
        if(k1 == 0)
        {
            fin>>k3;
            update_b_tree(k2,k3);
        }
        else if(k1 == 1)
        {
            fin>>k3;
            fout<<get_sum_big(k2,k3)<<"\n";
        }
        else if(k1 == 2)
        {
            int q = 1;
            while(q <= n)
            {
                if(btree[q] == k2) break;
                q++;
            }
            if(q != n+1 ) fout<<q<<"\n";
            else fout<<"-1\n";
        }
    }
}