Cod sursa(job #2297357)

Utilizator BotzkiBotzki Botzki Data 5 decembrie 2018 19:05:06
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>

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