Cod sursa(job #3161096)

Utilizator Manolea_Teodor_StefanManolea Teodor Stefan Manolea_Teodor_Stefan Data 25 octombrie 2023 19:23:09
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n_elem, n_query,x,t,st,dr;
long long aib[100001];


void update(int pos, int val){
    for(int i = pos; i <= n_elem; i+=i&-i)
        aib[i]+=val;

}
int query(int pos){
    int sum = 0;
    for(int i = pos; i; i-=i&-i)
        sum+=aib[i];
    return sum;
}
int find_x(int val){
    int l = 1,r = n_elem;
    while(l<=r){
        int mid = l + (r-l)/2;
        if(aib[mid] == val)
            return mid;
        if(aib[mid]> val)
            r = mid - 1;
        else
            l = mid + 1;
    }
}

int main()
{
    fin>>n_elem>>n_query;
    for(int i = 1; i<=n_elem; i++){
        fin>>x;
        update(i, x);
    }
    for(int i = 1; i<=n_query; i++){
        fin>>t;
        if(t == 0){
            fin>>st>>x;
            update(st, x);
        }
        else if(t == 1){
            fin>>st>>dr;
            fout<<query(dr)-query(st-1)<<'\n';
        }
        else{
            fin>>x;
            fout<<find_x(x)<<'\n';
        }


    }
    return 0;
}