Cod sursa(job #368796)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 25 noiembrie 2009 21:53:30
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
# include <stdio.h>

int a[60005],sumf,i,n,b,l,x,y,k,poz;

void arb (int st,int dr,int i)
{

 if (st==dr)
 a[i]=x;
  else
  {
  int mij=(st+dr)/2;
  if (poz<=mij)
  arb (st,mij,2*i);
  else
  arb (mij+1,dr,2*i+1);

  a[i]=a[2*i]+a[2*i+1];
      }
    }



 void  sum (int st,int dr,int i)
   {
   if (x<=st && y>=dr)
    {
     sumf=sumf+a[i];
     }
    else
    {

    int mij=(st+dr)/2;
    if (x<=mij)
    sum (st,mij,2*i);

     if (y>mij)
     sum (mij+1,dr,2*i+1);




     }
     }

    void inter (int st,int dr,int i)
{

 if (st==dr)
 a[i]=a[i]-y;
  else
  {

  int mij=(st+dr)/2;
  if (x<=mij)
  inter (st,mij,2*i);
  else
  inter (mij+1,dr,2*i+1);

  a[i]=a[2*i]+a[2*i+1];
      }

   }




int main ()
{
freopen ("datorii.in","r",stdin);
freopen ("datorii.out","w",stdout);
scanf ("%i%i",&n,&k);

 for (i=1;i<=n;i++)
  {
  poz=i;
  scanf ("%i",&x);
  arb (1,n,1);
  }

  for (i=1;i<=k;i++)
  {
   scanf ("%i%i%i",&l,&x,&y);


   if (l==1)
    {
     sumf=0;
     sum (1,n,1);
     printf ("%i\n",sumf);
    }
  else
   inter (1,n,1);

   }
   return 0;

   }