Cod sursa(job #2904598)

Utilizator AntoniaPopoviciAntonia-Adelina Popovici AntoniaPopovici Data 18 mai 2022 00:11:30
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb

#include <fstream>
#include <cstdlib>
#define MAX 400011

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


int v[MAX];
int poz, val, st, dr;

int maxim(int x, int y)
{
	if (x > y)
		return x;
	return y;
}
void update(int k, int left, int right)
{
	if (left == right)
	{
		v[k] = val;
		return;
	}
	int mij = (left + right) / 2;
	if (poz <= mij)
		update(2 * k, left, mij);
	else
		update(2 * k + 1, mij + 1, right);
	v[k] = maxim(v[2 * k], v[2 * k + 1]);
}

int query(int k, int left, int right)
{
	if (left >= st && right <= dr)
		return v[k];
	int mij = (left + right) / 2, m = -1;
	if (st <= mij)
		m = query(2 * k, left, mij);
	if (dr > mij)
		m = maxim(m, query(2 * k + 1, mij + 1, right));
	return m;
}
int main()
{
	int n, m, i, p;
	fin >> n >> m;
	for (i = 1; i <= n; ++i)
	{
		fin >> val;
		poz = i;
		update(1, 1, n);
	}
	while (m)
	{

		fin >> p;
		if (1 == p)
		{
			fin >> poz >> val;
			update(1, 1, n);
		}
		else
		{
			fin >> st >> dr;
			fout << query(1, 1, n) << '\n';
		}
		--m;
	}
	return 0;
}