Cod sursa(job #2919124)

Utilizator mircea_007Mircea Rebengiuc mircea_007 Data 15 august 2022 18:32:11
Problema Heapuri cu reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
// This program was written by Mircea Rebengiuc
// for problem mergeheap
// on 15.08.2022

#include <stdio.h>
#include <ctype.h>

#include <queue>

#define magic_sauce inline __attribute__((always_inline))

FILE *fin, *fout;

magic_sauce int fgetint(){
  int n = 0, ch;

  while( !isdigit( ch = fgetc( fin ) ) );
  do
    n = n * 10 + ch - '0';
  while( isdigit( ch = fgetc( fin ) ) );

  return n;
}

#define MAXN 100

std::priority_queue<int> heaps[MAXN];

int main(){
  fin = fopen( "mergeheap.in", "r" );
  fout = fopen( "mergeheap.out", "w" );

  int n, q, i, a, b;

  n = fgetint();
  q = fgetint();

  for( ; q-- ; ){
    switch( fgetint() ){
    case 1:
      i = fgetint() - 1;
      heaps[i].push( fgetint() );
      break;

    case 2:
      fprintf( fout, "%d\n", heaps[i = fgetint() - 1].top() );
      heaps[i].pop();
      break;

    case 3:
      a = fgetint() - 1;
      b = fgetint() - 1;

      if( heaps[b].size() > heaps[a].size() )
        std::swap( heaps[a], heaps[b] );

      while( heaps[b].size() ){
        heaps[a].push( heaps[b].top() );
        heaps[b].pop();
      }
      break;
    }
  }

  fclose( fin );
  fclose( fout );
  return 0;
}