Cod sursa(job #408429)

Utilizator zbarniZajzon Barna zbarni Data 3 martie 2010 00:50:05
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<cstdio>
#define nx 100005
using namespace std;
int arb[nx*4],max,a,b,poz,what;
inline int maxim (int x,int y)
{
	if (x>y) return x;
	else return y;
}
void update (int nod,int st,int dr)
{
	if (st==dr)
		arb[nod]=what;
	else
	{
		int mij=(st+dr)/2;
		if (poz<=mij)
			update(nod*2,st,mij);
		else update(nod*2+1,mij+1,dr);
		arb[nod]=maxim(arb[nod*2],arb[nod*2+1]);
	}
	
}
void query(int nod,int st,int dr)
{
	if (a<=st && b>=dr)
	{	if (arb[nod]>max) max=arb[nod]; }
	else
	{
		int mij=(st+dr)/2;
		if (a<=mij) query(nod*2,st,mij);
		if (b>mij) query(nod*2+1,mij+1,dr);
	}
}
int main()
{
  freopen ("arbint.in","r",stdin);
  freopen ("arbint.out","w",stdout);
  int n,m;
  scanf("%d%d",&n,&m);
  int i,c;
  for (i=1;i<=n;++i)
   {
    scanf("%d",&what);
    poz=i;
    update(1,1,n);
   }
  for (;m;--m)
   {
    scanf("%d%d%d",&c,&a,&b);
    if (c==0)
     {
      max=-1;
      query(1,1,n);
      printf("%d\n",max);
     }
    else
     {
      what=b;poz=a;
      update(1,1,n);
     }
   }
  return 0;
 }