Cod sursa(job #1076242)

Utilizator bghimisFMI Ghimis Bogdan bghimis Data 9 ianuarie 2014 23:23:34
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 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;
  bitset<200001> deletat;

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

      int x; 
      inserat_element.push_back(0);
      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[x] = true;

	  break;

	case 3:
	  while (deletat[x = PQ.top()] == 1)
	    PQ.pop();
	  
	  fprintf (out, "%d\n", x);

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

  return 0;
}