Cod sursa(job #2041821)

Utilizator luanastLuana Strimbeanu luanast Data 17 octombrie 2017 19:47:48
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int v[100001],n,m,a,b,op,i,x;
int query(int p){
    int r=0;
    for(;p;p-=(p&-p))
        r+=v[p];
    return r;
}

void update (int p, int x){
    for(;p<=n;p+=(p&-p))
        v[p]+=x;
}

int search (int a){
    int p=1;
    int u=n;
    while(p<=u){
        int mid=(p+u)/2;
        int midsum=query(mid);
        if(midsum==a)
            return mid;
        if(midsum<a)
            p=mid+1;
        else
            u=mid-1;
    }

}


int main(){
    fin>>n>>m;
    for(i=1;i<=n;i++){
        fin>>x;
        update(i,x);
    }
    for(i=1;i<=m;i++){
        fin>>op;
        if(op==0){
            fin>>a>>b;
            update(a,b);
        }
        if(op==1){
            fin>>a>>b;
            fout<<query(b)-query(a-1)<<"\n";
        }
        if(op==2){
            fin>>a;
            fout<<search(a)<<"\n";
        }
    }
    return 0;
}