Cod sursa(job #2829244)

Utilizator Simon2712Simon Slanina Simon2712 Data 8 ianuarie 2022 13:57:37
Problema Arbori indexati binar Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>

using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
const int N=10001;
int aib[N];
void adaug(int nod,int val)
{
    int i;
    for(i=nod;i<=N;i+=(i&(-i)))
        aib[i]+=val;
}
int f(int nod)
{
    int s=0,i;
    for(i=nod;i>0;i-=(i&(-i)))
        s+=aib[i];
    return s;
}
void f2(int val)
{
    int st,dr,mij;
    st=1;
    dr=N;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(f(mij)<val)
            st=mij+1;
        else
            dr=mij-1;
    }
    if(f(st)!=val)
        cout<<-1;
    else
        cout<<st;
}
int main()
{
    int n,m,i,x,t,y;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
        cin>>x;
        adaug(i,x);
    }
    for(i=1;i<=m;i++)
    {
        cin>>t>>x;
        if(t==2)
            f2(x);
        else{
            cin>>y;
            if(t==0)
                adaug(x,y);
            else
                cout<<f(y)-f(x-1);
        }
        if(t)
            cout<<'\n';
    }
    return 0;
}