Cod sursa(job #238620)

Utilizator patricia_iIosifescu Patricia patricia_i Data 2 ianuarie 2009 19:38:06
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 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, 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;++j)
    {
    fscanf(f,"%d%d%d",&x,&a,&b);
    if (!x)
       {
       max=-1;
       bla(1,1,n);
       fprintf(g,"%d",max);
       }
       else
           {
                          poz=a;
                          val=b;
                          upd(1,1,n);
           }
       }
return 0;
}