Cod sursa(job #1795527)

Utilizator proflaurianPanaete Adrian proflaurian Data 2 noiembrie 2016 16:58:22
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#define N 100010
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int aib[N],n,m,i,cod,a,b,lo,hi,mi,x,query(int);
void update(int,int);
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>x;
        update(i,x);
    }
    for(;m;m--)
    {
        f>>cod;
        if(cod==0)
        {
            f>>a>>x;
            update(a,x);
        }
        else
            if(cod==1)
            {
                f>>a>>b;
                g<<query(b)-query(a-1)<<'\n';
            }
            else
            {
                f>>x;
                for(lo=0,hi=n;hi-lo-1;)
                {
                    mi=(lo+hi)/2;
                    if(query(mi)>=x)
                        hi=mi;
                    else
                        lo=mi;
                }
                if(query(hi)==x)
                    g<<hi<<'\n';
                else
                    g<<"-1\n";
            }
    }
    return 0;
}
int query(int p)
{
    int r;
    for(r=0;p;p-=p&(-p))
        r+=aib[p];
    return r;
}
void update(int p,int v)
{
    for(;p<=n;p+=p&(-p))
        aib[p]+=v;
}