Cod sursa(job #3286430)

Utilizator Dragos__1_1Dragos Antohi Dragos__1_1 Data 14 martie 2025 10:45:40
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int t,n,m,i,j,a,b,c,v[100003],q,aib[100003];
int lsb(int x){return (x&(-x));}
void add(int poz,int val){
    for (int i=poz;i<=n;i+=lsb(i)){
        aib[i]+=val;
    }
}
int sum(int poz){
    int s=0;
    for(int i=poz;i>0;i-=lsb(i)){
        s+=aib[i];
    }
    return s;
}
int sum_int(int st,int dr){
    return sum(dr)-sum(st-1);
}
void pref(int val){
    int st=1,dr=n,mid,aux,poz=1e9;
    while(st<=dr){
        mid=(st+dr)/2;
        aux=sum(mid);

        if (aux>=val){
            dr=mid-1;
            poz=mid;
        }
        else {
            st=mid+1;
        }
    }
    if (sum(poz)==val)
    g<<poz<<'\n';
    else g<<-1<<'\n';

}
int main()
{   f>>n>>q;
    for (i=1;i<=n;i++){
        f>>v[i];
        add(i,v[i]);
    }
    for (i=1;i<=q;i++){
        f>>c;
        if (c==0){
            f>>a>>b;
            add(a,b);
        }
        else if (c==1){
            f>>a>>b;
            g<<sum_int(a,b)<<'\n';
        }
        else if (c==2){
            f>>a;
            pref(a);
        }
    }
    return 0;
}