Cod sursa(job #806671)

Utilizator moscaliuc_ovidiuMoscaliuc Ovidiu moscaliuc_ovidiu Data 3 noiembrie 2012 11:44:53
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <set>
#include <vector>
#include <fstream>

class Heap
{
private:
	typedef std::multiset<unsigned int>			Numbers;
	typedef std::vector<unsigned int>			Positions;

private:
	Numbers		numbers;
	Positions	positions;

public:
	Heap()
	{
		positions.reserve(200000);
	}

	void insert(unsigned int _number)
	{
		numbers.insert(_number);
		positions.push_back(_number);
	}
	void removeByPos(unsigned int _pos)
	{
		Numbers::iterator		itNumber;

		itNumber = numbers.find(positions[_pos - 1]);
		if (numbers.end() != itNumber)
			numbers.erase(itNumber);
	}

	unsigned int getMin()
	{
		return *numbers.begin();
	}
};

int main()
{
	unsigned int N = 0;
	unsigned int x = 0;

	Heap heap;

	std::ifstream fin("heapuri.in");
	std::ofstream fout("heapuri.out");

	fin>>N;

	for (unsigned int i = 0; i < N; ++ i)
	{
		unsigned int op = 0;

		fin>>op;

		switch(op)
		{
		case 1:
			{
				fin>>x;

				heap.insert(x);
			}
			break;
		case 2:
			{
				fin>>x;

				heap.removeByPos(x);
			}
			break;
		case 3:
			{
				fout<<heap.getMin()<<'\n';
			}
			break;
		}
	}

	return 0;
}