Cod sursa(job #1104391)

Utilizator oprea1si2si3Oprea Sebastian oprea1si2si3 Data 10 februarie 2014 19:16:20
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<fstream>
#include<iostream>
using namespace std;

int N,M,aib[100100];

int suma(int nod) {
    int s=0;
    while(nod) {
        s+=aib[nod];
        nod-=(nod&-nod);
        }
     return s;
}

void update(int nod,int val) {
        while(nod<=N)  {
         aib[nod]+=val;
         nod+=(nod&-nod);
        }
    }

int cautbin(int x) {

    int st,dr,mij;
    st=1;
    dr=N;
    while(st<=dr){
        mij=(st+dr)/2;
        if(suma(mij)==x)
            return mij;
        if(suma(mij)<x)
            st = mij+1;
        else
            dr = mij-1;
    }
    return -1;
}

int main () {

     ifstream in("aib.in");
     ofstream out("aib.out");
     int i,a,b,x,k,operatie;
     in>>N>>M;
     for(i=1;i<=N;i++){
        in>>x;
        update(i,x);
     }
     for(i=1;i<=M;i++) {
        in>>operatie;
        if(operatie==0) {
            in>>a>>b;
            update(a,b);
        }

        if(operatie==1) {
             in>>a>>b;
             out<<suma(b)-suma(a-1)<<'\n';
            }
        if(operatie==2) {
                in>>k;
                out<<cautbin(k)<<'\n';
            }
    }
    in.close();
    out.close();
    return 0;

}