Cod sursa(job #3313561)

Utilizator pachy2007Pachitanu Matei pachy2007 Data 5 octombrie 2025 11:59:24
Problema Arbori indexati binar Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
long long n,m,aib[100005],c,a,b,st,dr,x;
void update(long long a, long long b)
{
    for(int i=a;i<=n;i+=((-i)&i))
        aib[i]+=b;
}

long long query(long long x)
{
    long long suma=0;
    for(long long i=x;i>0;i-=(i&(-i)))
        suma+=aib[i];
    return suma;
}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
        {fin>>x;
        update(i , x);}

    for(int j=1;j<=m;j++)
    {
        fin>>c;
        if(c==0)
        {
            fin>>a>>b;
            update(a ,b);
        }

        if(c==1)
        {
            fin>>st>>dr;
            fout<<query(dr)-query(st-1)<<'\n';
        }

        if(c==2)
        {
            fin>>a;
            long long s=0;
            long long k=(1<<(int)log2(n));
            long long x=0;
            for(;k>=1;k=k/2)
            {
                if(s+aib[x+k]<=a && x+k<=n)
                {
                    s=s+aib[x+k];
                    x+=k;
                }
            }
            if(s==a)
            fout<<x<<'\n';
            else fout<<"-1"<<'\n';
        }
    }
    return 0;
}