Cod sursa(job #565863)

Utilizator bacilaBacila Emilian bacila Data 28 martie 2011 12:59:49
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
using namespace std;
int n,s[100005],m,suma;
int ver()
{   int index=0,i;
    for(i=31-__builtin_clz(n);i>=0;i--)
    if(index+(1<<i)<=n)
    if(s[index+(1<<i)]<=suma){
    suma-=s[index+(1<<i)]; index+=(1<<i);
    if(!suma)
    return index;}
    return -1;
}

int main()
{ifstream f("aib.in");
int i,x,c,val,y;
    f>>n>>m;
    for(i=1;i<=n;i++)
    {f>>y; x=i;
    while(x<=n)
    {s[x]+=y;
    x+=x&(-x);}
    }
    ofstream g("aib.out");
    for(i=1;i<=m;i++)
    {
        f>>c;
        if(c==0){
        f>>x>>val;
    while(x<=n)
    {s[x]+=val;
    x+=x&(-x);}
        }
        else
        if(c==1)
        {f>>x>>y;
        suma=0;
        x--;
         while(x>0)
    {suma-=s[x];
    x-=x&(-x);}
        while(y>0)
    {suma+=s[y];
    y-=y&(-y);}
    g<<suma<<'\n';}
        else
        {f>>suma;
        g<<ver()<<'\n';
            }
    }
    f.close();
    g.close();
return 0;}