Cod sursa(job #1754017)

Utilizator dtoniucDaniel Toniuc dtoniuc Data 7 septembrie 2016 14:23:41
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <queue>

using namespace std;

int main()
{
    ifstream fin;
    ofstream fout;
    fout.open("heapuri.out");
    fin.open("heapuri.in");

    auto cmp = [](pair<int, int> left, pair<int, int> right)
    {
    	if(left.first == right.first)
    		return left.second > right.second;
    	return left.first > right.first;
    };

    int n, opt, x;
    fin >> n;

    vector<bool> v(n + 1, false);
	priority_queue<int, std::vector<pair<int, int>>, decltype(cmp)> heap(cmp);

	int pos = 1;
	for(int i = 1; i <= n ; i++)
	{
		fin >> opt;
		switch(opt)
		{
			case 1:
				fin >> x;
				heap.push(make_pair(x, pos++));
				break;
			case 2:
				fin >> x;
				v[x] = true;
				break;
			case 3:
				while(v[heap.top().second])
					heap.pop();

				fout << heap.top().first << "\n";
				break;
			default:
				exit(1);
		}
	}

    fin.close();
    fout.close();
    return 0;
}