Cod sursa(job #2906727)

Utilizator NutaAlexandruASN49K NutaAlexandru Data 27 mai 2022 08:46:53
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#import<fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int n,aib[100001],b=(1<<17);
void update(int poz,int val)
{
    for(int i=poz;i<=n;i+=(i&(-i)))
    {
        aib[i]+=val;
    }
}
int query(int poz)
{
    int ans=0;
    for(int i=poz;i>0;i-=(i&(-i)))
    {
        ans+=aib[i];
    }
    return ans;
}
int caut(int x)
{
    int rez=0,s=0;
    for(int i=b;i>0;i>>=1)
    {
        if(rez+i<=n && s+aib[rez+i]<=x)
        {
            rez+=i;
            s+=aib[rez];
        }
    }
    if(s!=x || rez==0)
    {
        return -1;
    }
    else
    {
        return rez;
    }
}
main()
{
    int q;
    cin>>n>>q;
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;
        update(i,x);
    }
    while(q--)
    {
        int cerr,a,b;
        cin>>cerr;
        if(!cerr)
        {
            cin>>a>>b;
            update(a,b);
        }
        else if(cerr==1)
        {
            cin>>a>>b;
            cout<<query(b)-query(a-1)<<'\n';
        }
        else
        {
            cin>>a;
            cout<<caut(a)<<'\n';
        }
    }
}