Cod sursa(job #949782)

Utilizator tudorv96Tudor Varan tudorv96 Data 14 mai 2013 22:08:26
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <algorithm>
using namespace std;

#define in "arbint.in"
#define out "arbint.out"
#define N 100005
#define AN N*4

int arb[AN], n, m, x, a, b;

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

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

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