Cod sursa(job #2424531)

Utilizator The_one_and_onlyMironica Vasile The_one_and_only Data 23 mai 2019 10:55:02
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <algorithm>
#define NMAX 100000
using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");
int aint[4 * NMAX + 1];
int n, m;

void update(int poz, int val, int st, int dr, int i ) {
	int mid = (st + dr) / 2;
	if(st == dr )
		aint[i] = val;
	else {
		if(poz <= mid)
			update(poz, val, st, mid, i * 2 );
		else
			update(poz, val, mid + 1, dr, i * 2 + 1 );
		aint[i] = max(aint[i * 2],aint[i * 2 + 1]);
	}
}
 
int query(int a, int b, int st, int dr, int i ) {
	if(a == st && b == dr)
		return aint[i];
	else {
		int mid = ( st + dr ) / 2;
		if(b <= mid)
			query(a, b, st, mid, i * 2);
		else
			if(a > mid)
				query(a, b, mid + 1, dr, i * 2 + 1);
			else
				return max(query( a, mid, st, mid, i * 2), query(mid + 1, b, mid + 1, dr, i * 2 + 1));
	}
}
 
int main() {
	fin >> n >> m;
	for(int i = 1; i <= n; i++) {
		int x;
		fin >> x;
		update(i, x, 1, n, 1);
	}
	for(int i = 1; i <= m; i++) {
		int op, a, b;
		fin >> op >> a >> b;
		if(op == 1 )
			update(a, b, 1, n, 1);
		else
			fout << query(a, b, 1, n, 1) << '\n';
	}
}