Cod sursa(job #2041817)

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

void update (int p, int x){
    for(;p<=n;p+=(p&-p))
        A[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>>v[i];
        update(i,v[i]);
    }
    for(i=1;i<=m;i++){
        fin>>op;
        if(op==0){
            fin>>a>>b;
            v[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;
}