Cod sursa(job #2779789)

Utilizator arsy19Homentcovschi Andrei arsy19 Data 4 octombrie 2021 22:39:36
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("aib.in");
ofstream fout("aib.out");

int n,m,op,x,y,T[100001];

void add(int x,int y)
{
    while(x<=n)
  {
      T[x]+=y;
      x+=(x&-x);
  }
}

int qry(int x)
{
    int s=0;
    while(x>=1)
    {
        s+=T[x];
        x-=(x&-x);
    }
    return s;
}

int Search(int val)
{
    int step;
    for(step=1;step<n;step<<=1);

    for(int i=0;step;step>>=1)
        if(i+step<=n&&T[i+step]<=val)
        {
                i+=step;
                val-=T[i];
                if(!val)return i;
        }
    return -1;
}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;++i)fin>>T[i];

    for(int i=1;i<=n;++i)
    {
        int p=i+(i&-i);
        if(p<=n)T[p]+=T[i];
    }

    while(m--)
    {
        fin>>op;
        if(op<2)
        {
        fin>>x>>y;
        if(!op)add(x,y);
        if(op==1)fout<<qry(y)-qry(x-1)<<'\n';
        }

        else
        {
            fin>>x;
            fout<<Search(x)<<'\n';
        }

    }

    return 0;
}