Cod sursa(job #2221889)

Utilizator inquisitorAnders inquisitor Data 16 iulie 2018 01:22:06
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#import<bits/stdc++.h>
int N,o,t,x,y,B[100001];

void U(int p,int v){for(int i=p;i<=N;i+=i&-i)B[i]+=v;}

int Q(int p){int s=0,i=p;for(;i;i&=i-1)s+=B[i];return s;}

int S(int v){

    int i, step, r = -1;

    for(step = 1; step <= N; step <<= 1);

    for(i = 0; step; step >>= 1)
    {
         if(i + step <= N && v >= B[i + step])
         {
            i += step;

            v -= B[i];

            v || (r = i);
         }
    }

    return r;
}

int main(){

    std::ifstream f("aib.in");
    std::ofstream g("aib.out");

    for(f>>N>>o;N/++y;U(y,x))f>>x;

    for(;o--;)
    {
        f>>t>>x;

        switch(t)
        {
            case 0: f>>y;U(x, y);

            case 1: f>>y;g<<Q(y)-Q(x-1)<<'\n';

            case 2: g<<S(x)<<'\n';
        }
    }
}