Cod sursa(job #1228210)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 13 septembrie 2014 02:50:44
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>

using namespace std;

ifstream fin ("aib.in");
ofstream fout ("aib.out");

int n,m,x,y,op,i,p,k;
int v[100010];

int lsb (int i) {
    return i&(-i);
}

void update (int poz, int x) {

    for (int i=poz;i<=n;i+=lsb(i))
        v[i]+=x;
}

int query (int poz) {

    int sum=0;
    for (int i=poz;i>=1;i-=lsb(i))
        sum+=v[i];
    return sum;
}

int cautb () {
    int st,dr,mid;
    st=1;dr=n;
    while (st<=dr) {
        mid=(st+dr)/2;
        if (query(mid)<k)
            st=mid+1;
        else
            dr=mid-1;
    }
    if (query (st)!=k)
        return -1;
    return st;
}

int main () {

    fin>>n>>m;

    for (i=1;i<=n;i++) {
        fin>>x;
        update (i,x);
    }

    while (m--){
        fin>>op;
        if(op==2){
            fin>>k;
            fout<<cautb()<<"\n";
        }else{
            fin>>x>>y;
            if (op==0)
                update (x,y);
            else
                fout<<query(y)-query(x-1)<<"\n";
        }
    }

    return 0;
}