Cod sursa(job #3132103)

Utilizator fanevodaCalota Stefan fanevoda Data 21 mai 2023 23:14:31
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>

const int n = 100020;

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

int nr, a[n * 4], pos, k, r, l;

void upp(int node, int st, int dr) 
{

	if (dr == st) 
	{
		a[node] = nr;
		return;
	}

	int m = (st + dr) / 2;

	if (m < pos)
		upp(node * 2 + 1, m + 1, dr); 
	else 
		upp(node * 2, st, m);

	a[node] = std::max(a[node * 2 + 1], a[node * 2]);
}


void query(int nod, int st, int dr) 
{
	int m = (st + dr) / 2;

	if (dr <= l && st >= r)
	{
		k = std::max(k, a[nod]);
		return;
	}
	if (m >= r) 
		query(nod * 2, st, m);
	if (m < l) 
		query(nod * 2 + 1, m + 1, dr);
}
int main() {
	int n, m;

	in >> n >> m;

	for (int i = 1; i <= n; i++) {
		in >> nr;
		pos = i;
		upp(1, 1, n);
	}
	int x, y;
	while (m--) 
	{
		in >> k >> x >> y;

		if (k == 0)
		{
			r = x;
			l = y;

			query(1, 1, n);

			out << k << '\n';
		}
		else
		{
			pos = x;
			nr = y;

			upp(1, 1, n);
		}
		
	}
}