Cod sursa(job #1046876)

Utilizator acomAndrei Comaneci acom Data 3 decembrie 2013 17:47:32
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,m,p,t,a,b,v[100005];
inline int LSB(int x)
{
    return (x&(-x));
}
inline void update(int poz, int val)
{
    for (int i=poz;i<=n;i+=LSB(i))
        v[i]+=val;
}
inline int Sum(int poz)
{
    int sum=0;
    for (int i=poz;i;i-=LSB(i))
        sum+=v[i];
    return sum;
}
inline int cb(int val)
{
    int i=1,j=n,m,x;
    while (i<=j)
    {
        m=(i+j)>>1;
        x=Sum(m);
        if (val==x) return m;
        else
        {
            if (x<val) i=m+1;
            else j=m-1;
        }
    }
    return -1;
}
int main()
{
    int i;
    f>>n>>m;
    for (i=1;i<=n;++i)
    {
        f>>p;
        update(i,p);
    }
    for (i=1;i<=m;++i)
    {
        f>>t>>a;
        if (t==2) g<<cb(a)<<'\n';
        else
        {
            f>>b;
            if (t) g<<Sum(b)-Sum(a-1)<<'\n';
            else update(a,b);
        }
    }
    return 0;
}