Cod sursa(job #189589)

Utilizator sigridMaria Stanciu sigrid Data 15 mai 2008 21:49:41
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<fstream.h>
#define dim 100001
#define maxim(x,y) (x)>(y)?(x):(y)

unsigned long arb[dim],jum,max;

void update(unsigned long nod,unsigned long st, unsigned long dr, unsigned long poz, unsigned long val)
{if(st==dr) arb[nod]=val;

  else
   {
    jum=(st+dr)/2;

    if(poz<=jum) update(nod*2,st,jum,poz,val);
     else update(nod*2+1,jum+1,dr,poz,val);

    arb[nod]=maxim(arb[nod*2],arb[nod*2+1]);
   }
}

void query(unsigned long nod, unsigned long st, unsigned long dr, unsigned long a, unsigned long b)
{
if((a<=st)&&(b>=dr))
  {
   if(max<arb[nod]) max=arb[nod];
  }
 else
   {
    //jum=(st+dr)/2;
    if(a<=((st+dr)/2)) query(nod*2,st,(st+dr)/2,a,b);
    if(b>((st+dr)/2)) query(nod*2+1,((st+dr)/2)+1,dr,a,b);
   }
}

int main()
{
ifstream f("arbint.in");
ofstream g("arbint.out");

unsigned long n,m,i,a,b,x;

f>>n>>m;

for(i=1;i<=n;i++)
 {
  f>>x;
  update(1,1,n,i,x);
 }

for(i=1;i<=m;i++)
 {
  f>>x>>a>>b;

  if(x==0)
    {
     max=0;
     query(1,1,n,a,b);
     g<<max<<'\n';
    }
   else update(1,1,n,a,b);

 }

return 0;

}