Cod sursa(job #2894071)

Utilizator Alin_StanciuStanciu Alin Alin_Stanciu Data 27 aprilie 2022 11:06:54
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>

#define MAX_N 100000

using namespace std;

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

struct
{
	int V[3 * MAX_N + 5];

	int get(int st, int dr, int node, int l, int r)
	{
		if (l >= st && r <= dr)
			return V[node];

		int mij = (l + r) / 2, res = 0;

		if (st <= mij)
			res = max(res, get(st, dr, node * 2, l, mij));

		if (dr > mij)
			res = max(res, get(st, dr, node * 2 + 1, mij + 1, r));

		return res;
	}

	void set(int pos, int val, int node, int l, int r)
	{
		if (l == r) {
			V[node] = val;
			return;
		}

		int mij = (l + r) / 2;

		if (pos <= mij)
			set(pos, val, node * 2, l, mij);
		else
			set(pos, val, node * 2 + 1, mij + 1, r);

		V[node] = max(V[node * 2], V[node * 2 + 1]);
	}

} it;

int N, M;

int main()
{
	fin >> N >> M;

	for (int i = 1; i <= N; ++i)
	{
		int a;
		fin >> a;
		it.set(i, a, 1, 1, N);
	}

	for (int i = 1; i <= M; ++i)
	{
		int op, a, b;
		fin >> op >> a >> b;

		if (op == 0)
			fout << it.get(a, b, 1, 1, N) << '\n';
		else if (op == 1)
			it.set(a, b, 1, 1, N);
	}

	return 0;
}