Cod sursa(job #936519)

Utilizator forgetHow Si Yu forget Data 7 aprilie 2013 15:11:00
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>
using namespace std;

int main() {
	ifstream fin("arbint.in");
	ofstream fout("arbint.out");
	int n, m;
	fin >> n >> m;

	int size = 1;
	while (size < n) size *= 2;
	int a[2*size]; //segment tree
	for (int i = size; i < size+n; ++i)
		fin >> a[i];
	for (int i = size+n; i < 2*size; ++i)
		a[i] = 0;
	for (int i = size-1; i > 0; --i)
		a[i] = max(a[2*i], a[2*i+1]);

	int q, b, c;
	for (; m > 0; --m) {
		fin >> q >> b >> c;
		if (q == 0) {
			b += size-1; c += size-1;
			while (b <= c) {
				q = max(q, max(a[b], a[c]));
				b = b%2? b/2+1 : b/2;
				c = c%2? c/2 : c/2-1;
			}
			fout << q << '\n';
		}
		else {
			b += size-1;
			a[b] = c;
			while (b > 1) {
				b /= 2;
				a[b] = max(a[2*b], a[2*b+1]);
			}
		}
	}
	return 0;
}