Cod sursa(job #1076239)

Utilizator bghimisFMI Ghimis Bogdan bghimis Data 9 ianuarie 2014 23:21:01
Problema Heapuri Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 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:
	  do {
	    x = PQ.top();
	    PQ.pop();
	  }
	  while (deletat[x] == 1);

	  fprintf (out, "%d\n", x);

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

  return 0;
}