Cod sursa(job #805589)

Utilizator raulstoinStoin Raul raulstoin Data 31 octombrie 2012 19:23:07
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<cstdio>
#include<algorithm>
#define lmax 100005
using namespace std;
int n,m,arb[lmax],val,poz,il,ir,maxim;
void update(int l,int r,int nod)
{
	int mid=(l+r)/2;
	if(l==r)
	{
		arb[nod]=val;
		return;
	}
	if(poz<=mid)
		update(l,mid,2*nod);
	else
		update(mid+1,r,2*nod+1);
	arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
void search(int l,int r,int nod)
{
	if(il<=l && r<=ir)
	{
		maxim=max(maxim,arb[nod]);
		return;
	}
	int mid=(l+r)/2;
	if(il<=mid)
		search(l,mid,2*nod);
	if(ir>mid)
		search(mid+1,r,2*nod+1);
}
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",&val);
		poz=i;
		update(1,n,1);
	}
	for(i=1;i<=m;i++)
	{
		scanf("%d",&val);
		if(val==0)
		{
			maxim=-1;
			scanf("%d %d",&il,&ir);
			search(1,n,1);
			printf("%d\n",maxim);
		}
		if(val==1)
		{
			scanf("%d %d",&poz,&val);
			update(1,n,1);
		}
	}
	return 0;
}