Cod sursa(job #1231344)

Utilizator TibixbAndrei Tiberiu Tibixb Data 20 septembrie 2014 12:48:51
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<fstream>
using namespace std;
int n, m, i, ii, j, a[100007], p, u, x, op, s, k, mij;
ifstream in("aib.in");
ofstream out("aib.out");

int query(int p) {
    int s = 0;
    for(i=p; i>0; i-=(i&-i))
        s+=a[i];
    return s;
}

void update(int p, int x) {
    for(int i=p; i<=n; i+=(i&-i))
        a[i] += x;
}


int main(){
    in>>n>>m;
    for(i=1; i<=n; i++){
        in>>x;
        update(i, x);
    }
    for(;m--;){
        in>>op;
        if(op==0){
            in>>p>>x;
            update(p, x);
        }
        if(op==1){
            in>>p>>u;

            out<<query(u) - query(p-1)<<"\n";
        }
        if(op==2){
            ii=99999999;
            in>>k;
            p=1; u=n;
            s=0;
            while(p<=u){
                s=0;
                mij=p+(u-p)/2;
                s = query(mij);
                if(s>=k)
                    u=mij-1;
                else
                    p=mij+1;
            }

            if (query(p) == k)
                out<<p<<"\n";
            else
                out<<"-1"<<"\n";
        }
    }
}