Cod sursa(job #841640)

Utilizator dragangabrielDragan Andrei Gabriel dragangabriel Data 24 decembrie 2012 15:41:44
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int n,i,j,k,m,v[270000],st,dr,x,a,b,rez;

void update(int nod,int st,int dr)
{
	if (st==dr) 
		{ v[nod]=x; return; }
	int mij=(st+dr)/2;
	if (i<=mij) update(2*nod,st,mij);else
				update(2*nod+1,mij+1,dr);
	v[nod]=max(v[2*nod],v[2*nod+1]);
}

void query(int nod,int st,int dr)
{
	if (i<=st && dr<=x)
	{
		rez=max(rez,v[nod]);
		return;
	}
	int mij=(st+dr)/2;
	if (i<=mij) query(2*nod,st,mij);
	if (mij<x) query(2*nod+1,mij+1,dr);
}

int main()
{
	freopen("arbint.in","r",stdin);
	freopen("arbint.out","w",stdout);
	scanf("%d %d",&n,&m);
	for (i=1;i<=n;i++) scanf("%d",&x),update(1,1,n);
	for (j=1;j<=m;j++)
	{
		scanf("%d %d %d",&k,&i,&x);
		if (!k) 
			{
				rez=0;query(1,1,n);
				printf("%d\n",rez);
		}else
				update(1,1,n);
	}
	return 0;
}