Cod sursa(job #2446860)

Utilizator uvIanisUrsu Ianis Vlad uvIanis Data 10 august 2019 23:30:06
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
using namespace std;

ifstream fin("aib.in");
ofstream fout("aib.out");

int aib[100001], N, M, A, B, X;

void update(int i, int x){
    while(i <= N){
        aib[i] += x;
        i += (i&-i);
    }
}

int query(int i){
    int s = 0;
    while(i > 0){
        s += aib[i];
        i -= (i&-i);
    }
    return s;
}

int bin(int s){

    int step, i;

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

    for(i = 0; step; step = (step >> 1)){
        if(i + step <= N && s >= aib[i + step]){
            i += step; s -= aib[i];
            if(s == 0) return i;
        }
    }

    return -1;
}

int main()
{
    fin>>N>>M;
   for(int i=1; i<=N; i++){
        fin>>X;
        update(i, X);

   }

   for(; M; M--){
     fin>>X>>A;

     if(X == 2){
        fout<<bin(A)<<"\n";
     }
     else {
        fin>>B;
        if(X == 0){
            update(A, B);
        } else {
            fout<<query(B) - query(A - 1)<<"\n";

        }
     }
   }
}