Cod sursa(job #149222)

Utilizator megabyteBarsan Paul megabyte Data 5 martie 2008 14:14:33
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
#define INF "arbint.in"
#define OUF "arbint.out"
#define MAX(a,b) (a>b)?(a):(b)
const int TMAX=400100;
int val,a,b,segt[TMAX]={0};

void insert(int nod,int st,int dr)
{
   if(a<=st&&dr<=b) segt[nod]=val;
   else
   {
      int mij;
      mij=(st+dr)/2;
      if(a<=mij) insert(2*nod,st,mij);
      if(b>mij) insert(2*nod+1,mij+1,dr);

      segt[nod]=MAX(segt[2*nod],segt[2*nod+1]);
   }
}

void query(int nod,int st,int dr)
{
   if(a<=st&&dr<=b)  val=MAX(val,segt[nod]);
   else
   {
      int mij;
      mij=(st+dr)/2;
      if(a<=mij) query(2*nod,st,mij);
      if(b>mij) query(2*nod+1,mij+1,dr);
   }
}

int main()
{

  FILE *in,*out;
  in=fopen(INF,"r");
  out=fopen(OUF,"w");
  int i,x,y,z,n,m;

  fscanf(in,"%d%d",&n,&m);
  for(i=1;i<=n;++i)
  {
    fscanf(in,"%d",&val);
    a=b=i;
    insert(1,1,n);
  }

  for(i=1;i<=m;++i)
  {
    fscanf(in,"%d%d%d",&x,&y,&z);
    if(!x)
    {
      a=y;b=z;val=0;
      query(1,1,n);
      fprintf(out,"%d\n",val);
    }
    else
    {
       a=b=y;
       val=z;
       insert(1,1,n);
    }
  }

  fclose(in);fclose(out);
  return 0;
}