Cod sursa(job #1925825)

Utilizator oanaroscaOana Rosca oanarosca Data 13 martie 2017 19:04:46
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>

using namespace std;

int n, op, pos, val, start, finish, maxim, x, a, b, tip, maxarb[100001];

void update (int nod, int l, int r) {
	int m;
	if (l == r)
		maxarb[nod] = val;
	else {
		m = (l+r)/2;
		if (pos <= m)
			update(2*nod, l, m);
		else
			update(2*nod+1, m+1, r);
		maxarb[nod] = max(maxarb[2*nod], maxarb[2*nod+1]);
	}
}

void query (int nod, int l, int r) {
	int m;
	if (start <= l and r <= finish) {
		maxim = max(maxim, maxarb[nod]);
		return;
	}
	m = (l+r)/2;
	if (start <= m)
		query(2*nod, l, m);
	if (m < finish)
		query(2*nod+1, m+1, r);
}

int main () {
	ifstream fi("arbint.in");
	ofstream fo("arbint.out");
	fi >> n >> op;
	for (int i = 1; i <= n; i++)
		fi >> x, pos = i, val = x, update(1, 1, n);
	for (int i = 1; i <= op; i++) {
		fi >> tip >> a >> b;
		if (!tip) {
			start = a, finish = b; maxim = -1;	
			query(1, 1, n);
			fo << maxim << '\n';
		}
		else {
			pos = a, val = b;
			update(1, 1, n);
		}
	}
	return 0;
}