Cod sursa(job #1730536)

Utilizator MihalachiRazvanMihalachi Razvan MihalachiRazvan Data 17 iulie 2016 01:50:12
Problema Arbori indexati binar Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.58 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
#define dim 100001
long AIB,s,t,p,q,n,j,m,i,bi[2*dim],binar,a,b,k,ver;
int getparent(int x)
{
    return x-( (x ^ (x - 1)) & x );

}
int getnext(int x)
{
    return x+( (x ^ (x - 1)) & x );
}
int suma(int x)
{
    if(x==0)
        return 0;
    else
        return bi[x]+suma(getparent(x));
}
void up(int i,int x)
{
    j=i;
    while(j<=n)
    {
        bi[j]=bi[j]+x;
        j=getnext(j);
    }
}
int main()
{
    fin>>n>>m;
      for(i=1;i<=n;i++)
      {
          fin>>AIB;
          j=i;
          up(i,AIB);

      }
       for(i=1;i<=m;i++)
       {
           fin>>binar;
           if(binar==0)
           {
               fin>>a>>b;
               j=a;
               while(j<=n)
               {
                   bi[j]=bi[j]+b;
                   j=getnext(j);
               }
           }
           if(binar==1)
           {
               fin>>a>>b;
                fout<<suma(b)-suma(a-1);
                fout<<"\n";
           }
           if(binar==2)
           {
               fin>>a;
               k=1;
               ver=1;
                      while(ver==1&&suma(k)!=a)
                {
                    if(suma(k)>a)
                        ver=0;
                        k=k+1;
                }
                if(ver==1)
               fout<<k;
               else
               fout<<-1;
               fout<<"\n";
           }
       }
     fin.close();
     fout.close();
    return 0;
}