Cod sursa(job #3001317)

Utilizator JaguarKatStere Teodor Ioanin JaguarKat Data 13 martie 2023 15:02:17
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;

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

#define NMAX 100001

int start, finish, val, pos, maxim;
int maxarb[4 * NMAX + 1];

void update(int nod, int left, int right)
{
	if(left == right)
	{
		maxarb[nod] = val;
		return;
	}
	int div = (left + right) / 2;
	if(pos <= div)
	{
		update(2 * nod, left, div);
	}
	else
	{
		update(2 * nod + 1, div + 1, right);
	}
	maxarb[nod] = max(maxarb[2 * nod], maxarb[2 * nod + 1]);
}

void query(int nod, int left, int right)
{
	if(start <= left and right <= finish)
	{
		if(maxim < maxarb[nod])maxim = maxarb[nod];
		return;
	}
	int div = (left + right) / 2;
	if(start <= div)query(2 * nod, left, div);
	if(div < finish)query(2 * nod + 1, div + 1, right);
}

int main()
{
	int x, n, m, a, b;
	fin >> n >> m;
	for(int i = 1; i <= n; ++i)
	{
		fin >> x;
		pos = i;
		val = x;
		update(1, 1, n);
	}
	for(int i = 1; i <= m; ++i)
	{
		fin >> x >> a >> b;
		if(x == 0)
		{
			maxim = -1;
			start = a;
			finish = b;
			query(1, 1, n);
			fout << maxim << '\n';
		}
		else
		{
			pos = a;
			val = b;
			update(1, 1, n);
		}
	}
	return 0;
}