Cod sursa(job #1076258)

Utilizator bghimisFMI Ghimis Bogdan bghimis Data 9 ianuarie 2014 23:39:29
Problema Heapuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
#include <bitset>
#include <queue>
#include <vector>
#include <functional>
using namespace std;

int main()
{
  FILE *in, *out;

  in  = fopen ("heapuri.in",  "r");
  out = fopen ("heapuri.out", "w");

  priority_queue<int, vector<int>, greater<int> > PQ;
  vector<int> inserat_element; inserat_element.push_back(0);
  bitset<2000001> deletat;

  int n; fscanf (in, "%d", &n);
  for (int i = 1; i <= n; ++i)
    {
      int tip_operatie; fscanf (in, "%d", &tip_operatie);

      int x; 
      switch (tip_operatie)
	{
	case 1:
	  fscanf (in, "%d", &x);
	  
	  PQ.push(x);
	  inserat_element.push_back(x);

	  break;
	
	case 2:
	  fscanf (in, "%d", &x);
	  
	  deletat[inserat_element[x]] = true;

	  break;

	case 3:
	  for (int j = PQ.top(); deletat[j] == true; j = PQ.top())
	    PQ.pop();
	  
	  fprintf (out, "%d\n", PQ.top());

	  break;
	default:
	  throw new exception();
	} 
    }

  return 0;
}