Cod sursa(job #1076791)

Utilizator stanescu.raduRadu Stanescu stanescu.radu Data 10 ianuarie 2014 16:23:13
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream f ("arbint.in");
ofstream g("arbint.out");

const int N_MAX = 100005;
int n,m,x,k,a,b,start,sfarsit,maxim,val,poz,i;
int arb[4*N_MAX+66];

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

void query (int x, int st, int dr)
{
	if (start <= st && dr <= sfarsit)
	{
		if (maxim < arb[x]) maxim = arb[x];
		return ;
	}
	int mij = (st + dr) / 2;
	if (start <= mij) query(2*x,st,mij);
	if (mij <= sfarsit) query(2*x + 1,mij + 1,dr);
}

int main ()
{
	f >> n >> m;
	for (i = 1; i <= n; i++)
	{
		poz = i;
		val = x;
		update (1,1,n);
	}
	for (i = 1; i <= m; i++)
	{
		f >> x >> a >> b;
		if (x == 0)
		{
			maxim = -1;
			start = a;
			sfarsit = b;
			query(1,1,n);
			g << maxim << "\n";
		}
		else
		{
			poz = a;
			val = b;
			update(1,1,n);
		}
	}
	f.close();
	g.close();
	return 0;
}