Cod sursa(job #690967)

Utilizator blustudioPaul Herman blustudio Data 26 februarie 2012 09:23:37
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
/*
 * Autor: Paul Herman
 * Problema: multimi disjuncte
 * Data: 26.02.2012
 * Punctaj: -
 * Link: http://www.infoarena.ro/problema/arbint
 */
#include <fstream>
#include <iostream>
using namespace std;

int v[131072];
int n, m;
int q, a, b;

int query(int nod, int s, int d)
{
	if ((s == a) && (d == b))
		return v[nod];
	else
	{
		int m = (s + d) / 2;
		if (s <= m)
			return query(2 * nod, m, d);
		else
			return query(2 * nod + 1, s, m);
	}
}
void update(int nod, int s, int d)
{
	if (s == d)
		v[nod] = b;
	else
	{
		int m = (s + d) / 2;
		if (a <= m)
			update(2 * nod, s, m);
		else
			update(2 * nod + 1, m + 1, d);
		v[nod] = max(v[2 * nod], v[2 * nod + 1]);
	}
}
int main()
{
	ifstream fin("arbint.in");
	ofstream fout("arbint.out");
	fin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		fin >> b;
		a = i;
	}
	for (int i = 1; i <= m; i++)
	{
		fin >> q >> a >> b;
		if (q == 0)
			fout << query(1, 1, n) << '\n';
		else
			update(1, 1, n);
	}
	fin.close();
	fout.close();
	return 0;
}