Cod sursa(job #1423664)

Utilizator robx12lnLinca Robert robx12ln Data 22 aprilie 2015 10:33:29
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,v[100005];
void update(int p,int x){
    for(;p<=n;p+=(p&-p)){
        v[p]+=x;
    }
}
int query(int p){
    int s=0;
    for(;p!=0;p-=(p&-p)){
        s+=v[p];
    }
    return s;
}
int i,val,poz,a,b,p,u,k,op,mid;
int main(){
    fin>>n>>k;
    for(i=1;i<=n;i++){
        fin>>val;
        update(i,val);
    }
    for(;k;k--){
        fin>>op;
        if(op==0){
            fin>>poz>>val;
            update(poz,val);
        }
        if(op==1){
            fin>>a>>b;
            fout<<query(b)-query(a-1)<<"\n";
        }
        if(op==2){
            fin>>a;
            p=1;
            u=n;
            while(p<=u){
                mid=(p+u)/2;
                if(query(mid)==a){
                    fout<<mid<<"\n";
                    break;
                }
                if(query(mid)>a){
                    u=mid-1;
                }else{
                    p=mid+1;
                }
            }
        }
    }
    return 0;
}