Cod sursa(job #2754640)

Utilizator vlad082002Ciocoiu Vlad vlad082002 Data 26 mai 2021 10:41:43
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.66 kb
#include <bits/stdc++.h>
using namespace std;

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

int n, m, t[200005];

void init() {
	for(int i = n-1; i ; i--)
		t[i] = max(t[i<<1], t[i<<1|1]);
}

void update(int p, int x) {
	for(t[p += n] = x; p; p >>= 1)
		t[p >> 1] = max(t[p], t[p^1]);
}

int query(int l, int r) {
	int mx = 0;
	for(l += n, r += n; l < r; l >>= 1, r >>= 1) {
		if(r&1) mx = max(mx, t[--r]);
		if(l&1) mx = max(mx, t[l++]);
	}
	return mx;
}

int main() {
	fin >> n >> m;
	for(int i = 0; i < n; i++)
		fin >> t[i+n];

	init();
	while(m--) {
		int t, a, b;
		fin >> t >> a >> b;
		a--;
		if(t == 0) fout << query(a, b) << '\n';
		else update(a, b);
	}

}