Cod sursa(job #2824144)

Utilizator sireanu_vladSireanu Vlad sireanu_vlad Data 31 decembrie 2021 10:43:12
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
using namespace std;

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

int n, m, vec_max[100001], x, y, vmax;
bool op;

void update(int nod, int l, int r)
{
	if(l == r) vec_max[nod] = y;
	else
	{
		int m = (l + r)/2;
		if(x <= m) update(2*nod, l, m);
		else update(2*nod+1, m+1, r);
		vec_max[nod] = max(vec_max[2*nod], vec_max[2*nod+1]);
	}
}

void read()
{
	in >> n >> m;
	for(int i = 1; i <= n; ++i)
	{
		x = i;
		in >> y;
		update(1, 1, n);
	}
}

void query(int nod, int l, int r)
{
	if(x <= l && r <= y)
	{
		if(vmax < vec_max[nod])
			vmax = vec_max[nod];
	}
	else
	{
		int m = (l + r)/2;
		if(x <= m) query(2*nod, l, m);
		if(m < y) query(2*nod+1, m+1, r);
	}
}

int main()
{
	read();
	while(m--) 
	{
		in >> op >> x >> y;
		if(op) update(1, 1, n);
		else
		{
			vmax = 0;
			query(1, 1, n);
			out << vmax << '\n';
		}
	}
	return 0;
}