Cod sursa(job #1059063)

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

unsigned *v, param1, param2, max;

void modifica(unsigned nod, unsigned st, unsigned dr)
{
	if (st == dr)
		v[nod] = param2;
	else
	{
		unsigned 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(unsigned nod, unsigned st, unsigned dr)
{
	if (param1 <= st && dr <= param2)
	{
		if (max < v[nod])
			max = v[nod];
	}
	else
	{
		unsigned 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()
{
	unsigned n, m;
	bool alegere;
	ifstream f("arbint.in");
	f >> n >> m;
	v = new unsigned[n + 1];
	for (param1 = 1; param1 <= n; param1++)
	{
		f >> param2;
		modifica(1, 1, n);
	}
	ofstream g("arbint.out");
	for (int i = 1; i <= m; i++)
	{
		f >> alegere >> param1 >> param2;
		if (alegere)
			modifica(1, 1, n);
		else
		{
			max = 0;
			maxim(1, 1, n);
			g << max << '\n';
		}
	}
	f.close();
	g.close();
	return 0;
}