Cod sursa(job #159380)

Utilizator mariaciPopa Marius Ionut mariaci Data 14 martie 2008 08:59:17
Problema Arbori de intervale Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<stdio.h>
int n,m,poz,val,s,f,a[100],maxim;
int max(int x,int y)
{ return x>y ? x:y;
}
void update(int nod, int st,int dr)
{ if(st==dr) { a[nod]=val;
	       return;
	      }
  int mij=(st+dr)/2;
  if(poz<=mij) update(2*nod,st,mij);
  else update(2*nod+1,mij+1,dr);
  a[nod]=max(a[2*nod],a[2*nod+1]);
}
void query(int nod,int st,int dr)
{ if(s<=st && dr<=f)
     { if(maxim<a[nod]) maxim=a[nod];
       return;
     }
  int mij=(st+dr)/2;
  if(s<=mij) query(2*nod,st,mij);
  if(mij<f) query(2*nod+1,mij+1,dr);
}
int main()
{ freopen("arbint.in","r",stdin);
  freopen("arbint.out","w",stdout);
  scanf("%d%d",&n,&m);
  int i,op,y,z;
  for(i=1;i<=n;i++)
     { scanf("%d",&y);
       poz=i;
       val=y;
       update(1,1,n);
     }
  for(i=1;i<=m;i++)
     { scanf("%d%d%d",&op,&y,&z);
       if(op)
	  { poz=y;
	    val=z;
	    update(1,1,n);
	  }
       else { maxim=-1;
	      s=y;
	      f=z;
	      query(1,1,n);
	      printf("%d\n",maxim);
	    }
     }
  return 0;
}