Cod sursa(job #2756190)

Utilizator alessiamtr12Mitrica Alessia alessiamtr12 Data 30 mai 2021 10:46:17
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>

using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int aib[100002],n,m,tip,x,a,b;
int lsb(int k)
{
    return (k&(-k));
}
void update(int k,int val)
{
    for(int i=k;i<=n;i+=lsb(i))
    {
        aib[i]+=val;
    }
}
int query(int k)
{
    int sum=0;
    while(k)
    {
        sum+=aib[k];
        k-=lsb(k);
    }
    return sum;
}
int cb(int x)
{
    int st=1;
    int dr=n;
    int mid;
    int poz=-1;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        int y=query(mid);
        if(y>=x)
        {
            if(y==x)
                poz=mid;
            dr=mid-1;
        }
        else
            st=mid+1;
    }
    return poz;
}
int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        fin>>x;
        update(i,x);
    }
    for(int i=1;i<=m;i++)
    {
        fin>>tip;
        if(tip==0)
        {
            fin>>a>>b;
            update(a,b);
        }
        else
        if(tip==1)
        {
            fin>>a>>b;
            int x=query(b);
            int y=query(a-1);
            fout<<query(b)-query(a-1)<<"\n";
        }
        else
            {   fin>>a;
                fout<<cb(a)<<"\n";
            }
    }

    return 0;
}