Cod sursa(job #2338999)

Utilizator dahaandreiDaha Andrei Codrin dahaandrei Data 8 februarie 2019 11:01:55
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>

using namespace std;

ifstream in("arbint.in");
ofstream out("arbint.out");

const int MAXN = 1e5;
const int MAXM = 1e5;

int aint[MAXN << 2];
int n, m;

void update(int nod, int st, int dr, int poz, int val) {
	if (st == dr) aint[nod] = val;
	else {
		int mid = (st + dr) / 2;
		if (poz <= mid) update(nod << 1, st, mid, poz, val);
		else update(nod << 1 ^ 1, mid + 1, dr, poz, val);
		aint[nod] = max(aint[nod << 1], aint[nod << 1 ^ 1]);
	}
}

int query(int nod, int st, int dr, int a, int b) {
	if (st >= a && dr <= b) return aint[nod];
	int mid = (st + dr) / 2;
	int le = 0, ri = 0;
	if (mid >= a) le = query(nod << 1, st, mid, a, b);
	if (mid < b) ri = query(nod << 1 ^ 1, mid + 1, dr, a, b);
	return max(le, ri);
}

int main() {
	in >> n >> m;

	int a, b, t;
	for (int i = 1; i <= n; ++ i) {
		in >> a;
		update(1, 1, n, i, a);
	}

	for (int i = 1; i <= m; ++ i) {
		in >> t >> a >> b;
		if (t == 0) out << query(1, 1, n, a, b) << '\n';
		else update(1, 1, n, a, b);
	}


	return 0;
}