Cod sursa(job #3336859)

Utilizator gabi072Sanda Gabriel gabi072 Data 26 ianuarie 2026 12:03:14
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
#define pb push_back
#define nl '\n'
int aib[100001],v[100001],n;
void update(int poz,int val){
    for(int i=poz;i<=n;i+=(i&(-i)))
        aib[i]+=val;
}
int query(int x){
    int s=0;
    for(int i=x; i>0; i-=i&-i)
        s+=aib[i];
    return s;
}
int query(int st, int dr){
    return query(dr)-query(st-1);
}
int main(){
    fin>>n;
    int q;
    fin>>q;
    for(int i=1;i<=n;++i){
        fin>>v[i];
        v[i]+=v[i-1];
       aib[i]=v[i]-v[i-(i&(-i))];
    }
    for(int i=1;i<=q;++i){
        int t;
        fin>>t;
        if(t==0){
          int poz,val;
          fin>>poz>>val;
          update(poz,val);
        }
        else if(t==1){
          int x,y;
          fin>>x>>y;
          fout<<query(x,y)<<nl;
        }
        else {
          int x;
          fin>>x;
          int st=1,r=-1;
          int dr=n;
          while(st<=dr){
            int mij=(st+dr)>>1;
            int sum=query(mij);
            if(sum>=x)dr=mij-1,r=mij;
            else st=mij+1;
          }
          fout<<r<<nl;
        }
    }
}