Cod sursa(job #1234638)

Utilizator TibixbAndrei Tiberiu Tibixb Data 27 septembrie 2014 18:34:05
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<fstream>
using namespace std;
int n, m, op, i, i2, p, x, val, u, mij, a[100007];
void update(int p, int x){
    for(i2=p; i2<=n; i2+=(i2&(-i2)))
        a[i2]+=x;
}
int query(int p){
    int s=0;
    for(i2=p; i2>0; i2-=(i2&(-i2)))
        s+=a[i2];
    return s;
}
ifstream in("aib.in");
ofstream out("aib.out");
int main(){
    in>>n>>m;
    for(i=1; i<=n; i++){
        in>>x;
        update(i, x);
    }
    for(; m--;){
        in>>op;
        if(op==0){
            in>>p>>x;
            update(p, x);
        }
        if(op==1){
            in>>p>>u;
            out<<query(u)-query(p-1)<<"\n";
        }
        if(op==2){
            in>>val;
            p=1; u=n;
            while(p<=u){
                mij=p+(u-p)/2;
                if(query(mij)>=val)
                    u=mij-1;
                else
                    p=mij+1;
            }
            if(query(p)==val)
                out<<p<<"\n";
            else
                out<<"-1"<<"\n";
        }
    }
return 0;
}