Cod sursa(job #2643884)

Utilizator De_Azi_Ne_DopamAlex Ardelean De_Azi_Ne_Dopam Data 22 august 2020 00:47:02
Problema Arbori indexati binar Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
long long lsb(long long x)
{
    return x&-x;
}
long long n,aib[100001];
void upd(long long poz,long long val)
{
    for(; poz<=n; poz+=lsb(poz))
        aib[poz]+=val;
}
long long ans(long long poz)
{
    long long sum=0;
    for(; poz>0; poz-=lsb(poz))
        sum+=aib[poz];
    return sum;
}
long long cautbin(long long poz)
{
    long long r=0,pas=1<<16,sum=0;
    while(pas)
    {
        if(r+pas<=n&&sum+aib[r+pas]<=poz)
        {
            r+=pas;
            sum+=aib[r];
        }
        pas/=2;
    }
    if(sum==poz)
        return r;
    else
        return -1;
}
int main()
{
    long long m,i,a,b,t;
    in>>n>>m;
    for(i=1; i<=n; i++)
    {
        in>>a;
        upd(i,a);
    }
    for(i=1; i<=m; i++)
    {
        in>>t;
        if(t==0)
        {
            in>>a>>b;
            upd(a,b);
        }
        else if(t==1)
        {
            in>>a>>b;
            out<<ans(b)-ans(a-1)<<'\n';
        }
        else
        {
            in>>a;
            out<<cautbin(a)<<'\n';;
        }
    }
    return 0;
}