Cod sursa(job #2563347)

Utilizator Iulia14iulia slanina Iulia14 Data 1 martie 2020 10:54:16
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>

using namespace std;
ifstream cin ("aib.in");
ofstream cout ("aib.out");
int aib[100005];
int n;
int len(int x){
    return (x-(x&(x-1)));
};
int query(int pz){
    int sum=0;
    while (pz>0)
    {
        sum+=aib[pz];
        pz-=len(pz);
    }
    return sum;
};
int update(int pz,int val)
{
    while (pz<=n)
    {
        aib[pz]+=val;
        pz+=len(pz);
    }
}
int main()
{
    int rz,pas,q,i,op,a,b;
    cin>>n>>q;
    for (i=1;i<=n;i++)
    {
        cin>>a;
        update(i,a);
    }
    for (i=1;i<=q;i++)
    {
        cin>>op>>a;
        if (op==0)
        {
            cin>>b;
            update(a,b);
        }
        else
        if (op==1)
        {
            cin>>b;
            cout<<query(b)-query(a-1)<<'\n';
        }
        else
        {
            if (a==0)
                cout<<-1;
            else
            {rz=0;
            pas=1<<20;
            while (pas)
            {
                if (rz+pas<=n&&aib[rz+pas]<=a)
                {
                    rz+=pas;
                    a-=aib[rz];
                }
                pas/=2;

            }
            if (a==0)
                cout<<rz;
            else
                cout<<-1;
            }cout<<'\n';
        }
    }
    return 0;
}