Cod sursa(job #3319774)

Utilizator Deleanu_LucaDeleanu Luca Deleanu_Luca Data 3 noiembrie 2025 11:07:24
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include<iostream>
#include<fstream>
#define NMAX 100007

using namespace std;

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

int N,M,A[NMAX];
int BIT[NMAX];

int lsb(int x){
    return x&(-x);
}

void update(int pos, int val){
    for(int i=pos; i<=N; i+=lsb(i))
        BIT[i]+=val;
}

int query(int pos){
    int s=0; 
    for(int i=pos; i>0; i-=lsb(i))
        s+=BIT[i];
    return s;
}

int binary_search(int val){

    int left=1, right=N, mid; 

    while(left<=right)
    {
        mid=(left+right)/2;

        if(query(mid) == val)
            return mid;
        if(query(mid) < val)
            left = mid + 1;
        else 
            right = mid - 1;
    }

    return -1; 
}

int main(){

    fin>>N>>M;

    for(int i=1; i<=N; ++i){
        fin>>A[i];
        update(i, A[i]);
    }

    int op, a, b;

    for(int i=0; i<M; ++i){
        fin>>op;
        if(op==0){
            fin>>a>>b;
            update(a, b);
        }
        else if(op==1){
            fin>>a>>b;
            fout<<query(b)-query(a-1)<<'\n';
        }
        else if(op==2){
            fin>>a;
            fout<<binary_search(a)<<'\n';
        }
    }

    return 0;
}