Cod sursa(job #1231346)

Utilizator TibixbAndrei Tiberiu Tibixb Data 20 septembrie 2014 12:51:11
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 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 main(){
    in>>n>>m;
    for(i=1; i<=n; i++){
        in>>x;
        for(j=i; j<=n; j+=(j&-j))
            a[j]+=x;
    }
    for(;m--;){
        in>>op;
        if(op==0){
            in>>p>>x;
            for(i=p; i<=n; i+=(i&-i))
                a[i]+=x;
        }
        if(op==1){
            in>>p>>u;
            s=0;
            for(i=u; i>0; i-=(i&-i))
                s+=a[i];
            for(i=p-1; i>0; i-=(i&-i))
                s-=a[i];
            out<<s<<"\n";
        }
        if(op==2){
            ii=99999999;
            in>>k;
            p=1; u=n;
            s=0;
            while(p<=u){
                s=0;
                mij=p+(u-p)/2;
                for(i=mij; i>0; i-=(i&-i))
                    s+=a[i];
                if(s==k && mij<ii)
                    ii=mij;
                if(s>=k)
                    u=mij-1;
                else
                    p=mij+1;
            }
            ii!=99999999?out<<ii<<"\n":out<<"-1\n";
        }
    }
}