Cod sursa(job #1223089)

Utilizator mihaimusatMihai Musat mihaimusat Data 25 august 2014 14:12:45
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

using namespace std;

int i,n,m,st,dr,a,b,mid,q,x;
int v[100005];

int ub(int x) {
    return (x&(-x));
}

void update(int i, int val) {
    for(;i<=n;i+=ub(i))
        v[i]+=val;
}

int query1(int i) {
    int rez=0;
    for(;i;i-=ub(i))
        rez+=v[i];
    return rez;
}

int query2(int val) {
    st=1;
    dr=n;
    while(st<=dr) {
        mid=(st+dr)/2;
        if(query1(mid)>=val)
            dr=mid-1;
        else
            st=mid+1;
    }
    if(val==query1(st))
        return st;
    return -1;
}

int main() {
    ifstream f("aib.in");
    ofstream g("aib.out");
    f>>n>>m;
    for(i=1;i<=n;i++) {
        f>>x;
        update(i,x);
    }
    for(i=1;i<=m;i++) {
        f>>q;
        if(q==0) {
            f>>a>>b;
            update(a,b);
        }
        else
        if(q==1) {
            f>>a>>b;
            g<<query1(b)-query1(a-1)<<"\n";
        }
        else {
            f>>a;
            g<<query2(a)<<"\n";
        }
    }
    return 0;
}