Cod sursa(job #2027157)

Utilizator cameleonGeorgescu Dan cameleon Data 25 septembrie 2017 18:25:38
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>

using namespace std;
#define Nmax 100005

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

int v,aib[Nmax],n,m;

int suma(int x){
    int s=0;
    while(x!=0){
        s+=aib[x];
        x=x&(x-1);
    }
    return s;
}

void adaug(int x,int v){
    do
    {
        aib[x]+=v;
        x+=x&(-x);

    }while(x<=n);
}
int poz(int x){

    int st=1,dr=n,mij,s,p=-1;;
    while(st<=dr){
        mij=(st+dr)/2;
        s=suma(mij);
        if(s==x){
            p=mij;
            dr=mij-1;
        }
        else
            if(s>x)
                dr=mij-1;
            else
                st=mij+1;
    }
    return p;
}
int main()
{
    int a,b,op;

    fin>>n>>m;
    for(int i=1;i<=n;i++){
        fin>>v;
        adaug(i,v);
    }

    for(int i=1;i<=m;i++){
        fin>>op;
        switch(op){
            case 0: {
                fin>>a>>b;
                adaug(a,b);
                break;
            }
            case 1:{
                fin>>a>>b;
                fout<<suma(b)-suma(a-1)<<"\n";
                break;
            }
            case 2:{
                fin>>a;
                fout<<poz(a)<<"\n";
            }
        }
    }
    return 0;
}