Cod sursa(job #2308538)

Utilizator BotzkiBotzki Botzki Data 27 decembrie 2018 12:32:11
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>

using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int NMAX=100000;
int aib[NMAX+5];
//[i, j]=[1, j]-[1, i-1];
//query(j)-query(i-1);
int n;
void update(int poz, int x)
{
    for( ; poz<=n; poz=poz + ( poz &(-poz)))
        aib[poz]=aib[poz]+x;
}
int query(int poz)
{
    int s=0;
    for( ;poz>0; poz = poz - ( poz &(-poz)))
        s=s+aib[poz];
    return s;
}
int cautare_binara(int val)
{
    int st=1, dr=n, med, s;
    while(st<=dr)
    {
        med=(st+dr)>>1;
        s=query(med);
        if(s==val)
            return med;
        else
        {
            if(s>val)
                dr=med-1;
            else
                st=med+1;
        }
    }
    return -1;

}
int main()
{
    int k, i, a, b, t, x;
    fin>>n>>k;
    for(i=1;i<=n;i++)
    {
       fin>>x;
       update(i, x);
    }
    for(i=1;i<=k;i++)
    {
        fin>>t;
        if(t==0)
        {
            fin>>a>>b;
            update(a, b);
        }
        else
        {
            if(t==1)
            {
                fin>>a>>b;
               fout<<query(b)-query(a-1)<<"\n";
            }
            else
            {
              fin>>a;
              fout<<cautare_binara(a)<<"\n";
            }
        }
    }
    return 0;
}