Cod sursa(job #500478)

Utilizator shitprogrammingProgramming Shit shitprogramming Data 12 noiembrie 2010 12:10:10
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> arb,v;

int m,n,i,c,x,y,mx;

void nodmax(int nod,int L,int R,int a,int b)
{
	int M;

	if(a<=L&&R<=b)
	{
		if(mx<arb[nod]) mx=arb[nod];
	}
	else
	{
		M=(L+R)/2;
		if(a<=M) nodmax(2*nod,L,M,a,b);
		if(b>M) nodmax(2*nod+1,M+1,R,a,b);
	}
}

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);
		arb.push_back(x);
		v.push_back(x);
	}
	make_heap(arb.begin(),arb.end());

	for(i=1;i<=m;i++)
	{
		scanf("%d%d%d",&c,&x,&y);
		if(c==1)
		{
			x--;
			remove(arb.begin(),arb.end(),v[x]);
			arb.pop_back();
			arb.push_back(y);
			push_heap(arb.begin(),arb.end());
			v[x]=y;
		}
		else
		{
			mx=0;
			nodmax(0,0,99999,x,y);
			printf("%d\n",mx);
		}
	}

	return 0;
}