Cod sursa(job #2479714)

Utilizator mircearoataMircea Roata Palade mircearoata Data 24 octombrie 2019 12:58:49
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

int n, q;
int aint[262145];

int query(int ql, int qr, int l = 1, int r = n, int nod = 1)
{
	if (ql <= l && r <= qr)
		return aint[nod];
	int mid = (l + r) / 2;
	int maxx = 0;
	if (ql <= mid)
		maxx = max(maxx, query(ql, qr, l, mid, 2 * nod));
	if (mid < qr)
		maxx = max(maxx, query(ql, qr, mid + 1, r, 2 * nod + 1));
	return maxx;
}

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

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