Cod sursa(job #238636)

Utilizator patricia_iIosifescu Patricia patricia_i Data 2 ianuarie 2009 20:26:30
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<stdio.h>
FILE *f=fopen("arbint.in","r"), *g=fopen("arbint.out","w");
int n,m,v[1000000],i,j,max,val,poz,a,b,x;

void upd(int nod, int st, int dr)
{
if (st==dr)
   v[nod]=val;
   else
       {
       int mij=(st+dr)/2;
       if (poz<=mij)
	  upd(2*nod,st,mij);
	  else
	      upd(2*nod+1,mij+1,dr);
       if (v[2*nod]>v[2*nod+1])
	  v[nod]=v[2*nod];
			 else v[nod]=v[2*nod+1];
       }
}
void bla(int nod, int st, int dr)
{
     if (a<=st && dr<=b)
	{
	if (max<v[nod])
	   max=v[nod];
	}
	else
	    {
	    int mij=(st+dr)/2;
	    if (a<=mij) bla(2*nod,st,mij);
	    if (mij<b) bla (2*nod+1, mij+1,dr);
	    }
}
int main()
{
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;++i)
		 {
		 fscanf(f,"%d",&x);
		 poz=i;
		 val=x;
		 upd(1,1,n);
		 }
for (i=1;i<=m;++i)
    {
    fscanf(f,"%d%d%d",&x,&a,&b);
    if (!x)
       {
       max=-1;
       bla(1,1,n);
       fprintf(g,"%d\n",max);
       }
       else
	   {
			  poz=a;
			  val=b;
			  upd(1,1,n);
	   }
       }
return 0;
}