Cod sursa(job #2377136)

Utilizator AndreiBadescuBadescu Andrei-Octavian AndreiBadescu Data 8 martie 2019 22:13:06
Problema Componente tare conexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>

#define N 100001

using namespace std;
typedef unsigned int uint;

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

uint n,m,v[N],tree[2*N];

void build()
{
	/// elementele sirului in i + n
	for (uint i = 0; i < n; ++i)
		tree[i + n] = v[i];

	/// tatii
	for (uint i = n - 1; i > 0; --i)
		tree[i] = max(tree[i << 1], tree[i << 1 | 1]);
}

void update(uint a, uint b)
{
	tree[a += n] = b;

	while (a > 0)
	{
		tree[a >> 1] = max(tree[a], tree[a ^ 1]);
		a >>= 1;
	}
}

/// [l,r)
uint query(uint l, uint r)
{
	uint ma = 0;
	for (l += n, r += n; l < r; l >>= 1, r >>= 1)
	{
		if (l & 1)
			ma = max(ma, tree[l++]);

		if (r & 1)
			ma = max(ma, tree[--r]);
	}

	return ma;
}

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

	for (uint i = 0; i < n; ++i)
		fin >> v[i];

	build();

	for (uint c,a,b,i = 0; i < m; ++i)
	{
		fin >> c >> a >> b;

		if (c == 1)
			update(a - 1, b);
		else
			fout << query(a - 1, b) << '\n';
	}
}