Cod sursa(job #959874)

Utilizator tudorv96Tudor Varan tudorv96 Data 9 iunie 2013 10:47:57
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
using namespace std;

#define max(x,y) (((x)>(y))?(x):(y))
#define N 400000
#define in "arbint.in"
#define out "arbint.out"

int I[N], x, a, b, n, m;

void add(int J, int lo, int hi) {
	if (lo == hi) {
		I[J] = x;
		return;
	}
	int mid = (lo + hi) >> 1;
	if (a <= mid)
		add (J * 2, lo, mid);
	else
		add (J * 2 + 1, mid + 1, hi);
	I[J] = max (I[J * 2], I[J * 2 + 1]);
}

void query(int J, int lo, int hi) {
	if (a <= lo && hi <= b) {
		x = max (x, I[J]);
		return;
	}
	int mid = (lo + hi) >> 1;
	if (a <= mid)
		query (J * 2, lo, mid);
	if (mid < b)
		query (J * 2 + 1, mid + 1, hi);
}

int main() {
	ifstream fin (in);
	fin >> n >> m;
	ofstream fout (out);
	for (a = 1; a <= n; ++a) {
		fin >> x;
		add (1, 1, n);
	}
	for (int i = 0; i < m; ++i) {
		bool t;
		fin >> t;
		if (!t) {
			x = -1;
			fin >> a >> b;
			query (1, 1, n);
			fout << x << "\n";
		}
		if (t) {
			fin >> a >> x;
			add (1, 1, n);
		}
	}
	fcloseall();
	return 0;
}