Cod sursa(job #555140)

Utilizator selea_teodoraSelea Teodora selea_teodora Data 15 martie 2011 12:09:02
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<fstream>
using namespace std;
int n,m,arb[200005],pos,val,a,b,maxim,x;
void update(int nod,int left,int right)
{
	if(left==right)
	{
		arb[nod]=val;
		return;
	}
	int div=(left+right)/2;
	if(pos<=div)
		update(2*nod,left,div);
	else
		update(2*nod+1,div+1,right);
	if(arb[2*nod]<arb[2*nod+1])
		arb[nod]=arb[2*nod+1];
	else arb[nod]=arb[2*nod];
}
void query(int nod,int left,int right)
{
	if(a<=left&&right<=b)
	{
		if(maxim<arb[nod])
			maxim=arb[nod];
		return;
	}
	int div=(left+right)/2;
	if(a<=div)
		query(2*nod,left,div);
	if(div<b)
		query(2*nod+1,div+1,right);
}
int main()
{
	ifstream fin("arbint.in");
	ofstream fout("arbint.out");
	fin>>n>>m;
	int i;
	for(i=1;i<=n;i++)
	{
		fin>>val;
		pos=i;
		update(1,1,n);
	}
	for(i=1;i<=m;i++)
	{
		fin>>x>>a>>b;
		if(x==0)
		{
			maxim=-1;
			query(1,1,n);
			fout<<maxim<<'\n';
		}
		if(x==1)
		{
			pos=a;
			val=b;
			update(1,1,n);
			
		}
	}
	fout<<'\n';
	fin.close();
	fout.close();
	return 0;
}