Cod sursa(job #2384420)

Utilizator Raresr14Rosca Rares Raresr14 Data 20 martie 2019 18:41:23
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,i,t,a,b,v[100010],x;
void update(int a, int b){
    for(;a<=n;a+=(a&-a))
        v[a]+=b;
}
int suma(int b){
    int sol=0;
    for(;b;b-=(b&-b))
        sol+=v[b];
    return sol;
}
int poz(int a){
    int sol=0,st=0,p=1;
    for(p=1;2*p<=n;p*=2);
    for(;p;p/=2)
        if(st+p<=n){
            if(v[st+p]<=a){
                st+=p;
                a-=v[st];
                if(a==0)
                    return st;
            }
        }
    return -1;
}
int main(){
    fin>>n>>m;
    for(i=1;i<=n;i++){
        fin>>x;
        update(i,x);
    }
    for(i=1;i<=m;i++){
        fin>>t;
        if(t==0){
            fin>>a>>b;
            update(a,b);
        }
        if(t==1){
            fin>>a>>b;
            fout<<suma(b)-suma(a-1)<<"\n";
        }
        if(t==2){
            fin>>a;
            fout<<poz(a)<<"\n";
        }
    }
    return 0;
}