Cod sursa(job #3326980)

Utilizator radu._.21Radu Pelea radu._.21 Data 1 decembrie 2025 17:16:47
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int v[100001],aib[100001],n,m;
void update(int poz, int val){
    for(int i = poz; i<=n; i+=(i&-i))
        aib[i]+=val;
}
int query(int poz){
    int suma = 0;
    for(int i = poz; i>=1; i-=(i&-i))
        suma+=aib[i];
    return suma;
}
void cb(int val){
    int st = 1, dr = n;
    int poz = -1;
    while(st<=dr){
        //cout<<'\n';
        int mij = (st+dr)/2;
        int suma = query(mij);
        if(suma<=val)
            st = mij+1;
        else
            dr = mij-1;
        if(suma == val)
            poz = mij;
    }
    fout<<poz<<'\n';
}
int main(){
    // aib[i] = suma partiala[i]
    fin>>n>>m;
    for(int i = 1; i<=n ;i++){
        fin>>v[i];
        update(i,v[i]);
    }
    while(m--){
            //for(int i = 1; i<=n; i++){
          //  cout<<query(i)<<" ";
       // }
        int op ;
        fin>>op;
        if(op==0){
            int a,b;
            fin>>a>>b;
            update(a,b);
        } else if(op == 1){
            int a,b; fin>>a>>b;
            fout<<query(b)-query(a-1)<<'\n';
        } else{
            int a; fin>>a;
            cb(a);
        }
    }
    return 0;
}