Cod sursa(job #1059067)

Utilizator BionicMushroomFMI - Dumitrescu Tiberiu Alexandru BionicMushroom Data 16 decembrie 2013 04:01:35
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<fstream>
using namespace std;

long *v, param1, param2, val_max;

void modifica(long nod, long st, long dr)
{
	if (st == dr)
		v[nod] = param2;
	else
	{
		long m = ((st + dr) >> 1), dublu = (nod << 1);
		if (param1 <= m)
			modifica(dublu, st, m);
		else
			modifica(dublu + 1, m + 1, dr);
		v[nod] = v[dublu] < v[dublu + 1] ? v[dublu + 1] : v[dublu];
	}
}

void maxim(long nod, long st, long dr)
{
	if (param1 <= st && dr <= param2)
	{
		if (val_max < v[nod])
			val_max = v[nod];
	}
	else
	{
		long m = ((st + dr) >> 1), dublu = (nod << 1);
		if (param1 <= m)
			maxim(dublu, st, m);
		if (m < param2)
			maxim(dublu + 1, m + 1, dr);
	}
}

int main()
{
	long n, m;
	bool alegere;
	ifstream f("arblong.in");
	f >> n >> m;
	v = new long[n + 1];
	for (param1 = 1; param1 <= n; param1++)
	{
		f >> param2;
		modifica(1, 1, n);
	}
	ofstream g("arblong.out");
	for (long i = 1; i <= m; i++)
	{
		f >> alegere >> param1 >> param2;
		if (alegere)
			modifica(1, 1, n);
		else
		{
			val_max = 0;
			maxim(1, 1, n);
			g << val_max << '\n';
		}
	}
	f.close();
	g.close();
	return 0;
}