Cod sursa(job #1542339)

Utilizator roxi22Roxi C. roxi22 Data 5 decembrie 2015 12:15:38
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>

using namespace std;
#define nmax 100001
ifstream fin("aib.in");
ofstream fout("aib.out");

int X,n,x,p,AIB[nmax],m,a,b;
int lsb(int i){
    return i-(i&i-1);//i&(-i)
    }
void update(int p,int x){
    int i;
    for(i=p;i<=n;i+=lsb(i))//i+=i&(-i)
        AIB[i]+=x;
    //X[p]+=x;
    }
int query(int p){
    int s=0,i;
    for(i=p;i>=1;i-=lsb(i))//i+=i&(-i)
        s+=AIB[i];
    return s;}
int search(int v){
    int lo=1,hi=n,mij,s;
    while(lo<=hi)
        {   mij=(lo+hi)/2;
        s=query(mij);
        if(s==a)
            return mij;
        if(s<a)
             lo=mij+1;
        if(s>a)
             hi=mij-1;}
    return -1;
        }

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

        }



    //sum(a,b)=query(b)-query(a-1)

    return 0;
}