Cod sursa(job #340922)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 16 august 2009 23:29:32
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#define N 1<<17
int n,m,x,poz;
int v[N],maxim,inc,sf;
inline int max(int a,int b)
{
	if (a>b)
		return a;
	return b;
}
void update(int nod,int st,int dr)
{
	if (st==dr)
	{
		v[nod]=x;
		return;
	}
	int t=(st+dr)/2;
	if (poz<=t)
		update(nod*2,st,t);
	else
		update(nod*2+1,t+1,dr);
	v[nod]=max(v[nod*2],v[nod*2+1]);
}
void query(int nod,int st,int dr)
{
	if (inc<=st && dr<=sf)
	{
		if (maxim<v[nod])
			maxim=v[nod];
		return;
	}
	int t=(st+dr)/2;
	if (inc<=t)
		query(nod*2,st,t);
	if (t<sf)
		query(nod*2+1,m+1,dr);
}
int main()
{
	freopen("arbint.in","r",stdin);
	freopen("arbint.out","w",stdout);
	scanf("%d%d",&n,&m);
	int i;
	for (i=1; i<=n; i++)
	{
		scanf("%d",&x);
		poz=i;
		update(1,1,n);
	}
	int tip,a,b;
	for (i=1; i<=m; i++)
	{
		scanf("%d%d%d",&tip,&a,&b);
		if (tip==0)
		{
			maxim=0;
			inc=a;
			sf=b;
			query(1,1,n);
			printf("%d\n",maxim);
		}
		else
		{
			poz=a;
			x=b;
			update(1,1,n);
		}
	}
	return 0;
}