Cod sursa(job #1694475)

Utilizator GeorginskyGeorge Georginsky Data 25 aprilie 2016 15:11:21
Problema Arbori indexati binar Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
long long n, m, a[NMAX], BIT[NMAX];
void update(int x, int val){
    for(;x<=n; x+=x&(-x))BIT[x]+=val;
}

int query(int x){
    int s=0;
    for(; x>0; x-=x&(-x))s+=BIT[x];
    return s;
}

int searchForValue(int a){
    for(int i=1; i<=n; i++){
        if(query(i)==a)return i;
    }
    return -1;
}

void init(){
    for(int i=1; i<=n; i++)update(i, a[i]);
}

void read(){
    in>>n>>m;
    int op, X, B;
    long A;
    for(int i=1; i<=n; i++)in>>a[i];
    init();
    a[0]=0;
    for(int i=1; i<=m; i++){
        in>>op;
        if(op==0){
            in>>X>>B;
            a[X]+=B;
            update(X, B);
        }else if(op==1){
            in>>X>>B;
            out<<query(B)-query(X-1)<<"\n";
        }else{
            in>>A;
            out<<searchForValue(A)<<"\n";
        }
    }
}

int main(){
    read();
    return 0;
}