Cod sursa(job #1148939)

Utilizator Claudiu95Vartolomei Alexandru Claudiu Claudiu95 Data 21 martie 2014 12:32:10
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
#define maxn 300005
using namespace std;

ifstream f("aib.in");
ofstream g("aib.out");

long long int putere(int x){
    return x&(-x);
}
long long int x,arb[maxn],x1,x2,op,n,m,s1,s2,poz;
void update(long long int poz,long long int val){
    while(poz<=n){
        arb[poz]+=val;
        poz+=putere(poz);
    }

}
long long int suma( long long int pozitie){
    long long int s=0;
    while(pozitie>0){
        s+=arb[pozitie];
        pozitie-=putere(pozitie);
    }
    return s;

}
long long int search(int a){
   long long  int s=0,poz=1;
    s=arb[poz];
    while(s<a && poz<n){
        poz+=putere(poz);

        s=arb[poz];


    }
    if(s==a)
    return poz;
    else
        return -1;

}
int main()
{
    f>>n>>m;

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

        poz=i;
        update(poz,x);

    }
    for(int i=1;i<=m;++i){
        f>>op;
        if(op==0){
                f>>x1>>x2;
            update(x1,x2);
        }
        else
        if(op==1){
                f>>x1>>x2;
                s1=suma(x2);
                s2=suma(x1-1);
                g<<s1-s2<<"\n";
        }
        else{
            f>>x1;
            g<<search(x1);
            g<<"\n";
        }
    }
    return 0;
}