Cod sursa(job #3352133)

Utilizator mtcmtcmtc mtc mtcmtc Data 24 aprilie 2026 11:53:25
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>

using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
const int nmax=100005;
int aib[nmax];
int n;
void update(int poz,int val){
    for(int i=poz;i<=n;i+=i&(-i)){
        aib[i]+=val;
    }
}
int query(int poz){
    int s=0;
    for(int i=poz;i>0;i-=i&(-i)){
        s+=aib[i];
    }
    return s;
}
void cb(int val){
    int st=1,dr=n;
    while(st<=dr){
        int mid=(st+dr)/2;
        if(query(mid)<val) st=mid+1;
        else dr=mid-1;
    }
    if(query(st)!=val) cout<<-1;
    else cout<<st;
    cout<<'\n';
}
int main()
{
    int q;
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        update(i,x);
    }
    while(q--){
        int op;
        cin>>op;
        if(op==0){
            int a,b;
            cin>>a>>b;
            update(a,b);
        }
        if(op==1){
            int a,b;
            cin>>a>>b;
            cout<<query(b)-query(a-1)<<'\n';
        }
        if(op==2){
            int a;
            cin>>a;
            cb(a);
        }
    }
    return 0;
}