Cod sursa(job #3309568)

Utilizator anca.gdDumitru Anca Gabriela anca.gd Data 6 septembrie 2025 14:55:03
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int aib[100005], n,q,tip,a,b;
void update(int a, int val){
    while(a<=n){
        aib[a]+=val;
        a+=(a&(-a));
    }
}
int sum(int a, int b){
    if(a!=1)
        return sum(1,b)-sum(1,a-1);
    int ans=0;
    while(b){
        ans+=aib[b];
        b=b&(b-1);
    }
    return ans;
}
int query(int a){
    int p=1<<20, r=0, sum=0, ans=-1;
    while(p){
        if(r+p<=n && sum+aib[r+p]==a)
            ans=r+p;
        if(r+p<=n && sum+aib[r+p]<a){
            sum+=aib[r+p];
            r+=p;
        }
        p/=2;
    }
    return ans;
}
int main()
{
    cin>>n>>q;
    for(int i=1; i<=n;i++){
        cin>>a;
        update(i,a);
    }
    while(q--){
        cin>>tip;
        if(tip==0){
            cin>>a>>b;
            update(a,b);
        }
        else if(tip==1){
            cin>>a>>b;
            cout<<sum(a,b)<<'\n';
        }
        else{
            cin>>a;
            cout<<query(a)<<'\n';
        }
    }
    return 0;
}