Cod sursa(job #1257947)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 8 noiembrie 2014 12:35:47
Problema Arbori indexati binar Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include<fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
const int NMAX = 15009;

int v[NMAX],n,m;

void update(int poz,int val)
{

    int C = 0;
    while(poz <= n){
        v[poz] += val;
        while(!(poz & (1<<C))) C++;
        poz+=(1<<C);
        C++;
    }
}

int query(int poz)
{

    int C = 0 , S = 0;
    while(poz > 0){
        S += v[poz];
        while(!(poz & (1 <<C ))) C++;
        poz -= (1<<C);
        C++;
    }
    return S;
}

int query2(int val)
{

    int S , C;
    for(int i = 1 ; i <= n ; i++)
    {

        S =  C = 0;
        S = query(i);
        if(S == val)
            return i;
    }
    return -1;
}

int main()
{

    in>>n>>m;
    int x;
    for(int i = 1 ; i <= n ; i++)
    {
        in>>x;
        update(i,x);
    }
    int tip,a,b;
    for(int i = 1 ; i <= m ; i++){
        in>>tip;
        if(tip == 0){
            in>>a>>b;
            update(a,b);
        }
        else if(tip == 1){
            in>>a>>b;
            out<<query(b)-query(a-1)<<"\n";
        }
        else{
            in>>a;
            out<<query2(a)<<"\n";
        }
    }
    return 0;
}