Cod sursa(job #1656804)

Utilizator bogdan2510Ionut Bogdan bogdan2510 Data 19 martie 2016 20:12:49
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,m,arb[100005];
void update(int nod,int valoare){
    while(nod<=n){
        arb[nod]+=valoare;
        nod+=(nod&(-nod));
    }
}
int suma(int nod){
    int s=0;
    while(nod){
        s+=arb[nod];
        nod-=(nod&(-nod));
    }
    return s;
}
int query(int a){
    int st=1,dr=n;
    int mij=(st+dr)/2;
    int valo=suma(mij);
    while(valo!=a && st<=dr){
        if(a<valo){
            dr=mij-1;
        }else{
            st=mij+1;
        }
        mij=(st+dr)/2;
        valo=suma(mij);
    }
    if(st<=dr){
        return mij;
    }else{
        return -1;
    }
}
int main()
{
    f>>n>>m;int v,x,y;
    for(int i=1;i<=n;i++){
        f>>x;
        update(i,x);
    }

    for(int i=0;i<m;i++){
        f>>v>>x;
        if(v==0){
            f>>y;
            update(x,y);
        }else if (v==1){
            f>>y;
            g<<suma(y)-suma(x-1)<<"\n";
        }else if(v==2){
            g<<query(x)<<"\n";
        }
    }
    return 0;
}