Cod sursa(job #159376)

Utilizator mariaciPopa Marius Ionut mariaci Data 14 martie 2008 08:52:54
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<stdio.h>
int n,m,poz,val,in,sf,a[100],maxim;
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]=a[2*nod]>a[2*nod+1] ? a[2*nod]:a[2*nod+1];
}
void query(int nod,int st,int dr)
{ if(in<=st && dr<=sf)
     { if(maxim<a[nod]) a[nod]=maxim;
       return;
     }
  int mij=(st+dr)/2;
  if(in<=mij) query(2*nod,st,mij);
  if(mij<sf) 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,x;
  for(i=1;i<=n;i++)
     { scanf("%d",&x);
       poz=i;
       val=x;
       update(1,1,n);
     }
  for(i=1;i<=m;i++)
     { scanf("%d%d%d",&x,&in,&sf);
       if(x)
	  { poz=in;
	    val=sf;
	    update(1,1,n);
	  }
       else { maxim=-1;
	      query(1,1,n);
	      printf("%d\n",maxim);
	    }
     }
  return 0;
}