Pagini recente » Cod sursa (job #1282977) | Cod sursa (job #2172228) | Cod sursa (job #64994) | Cod sursa (job #2456035) | Cod sursa (job #1430815)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f( "heapuri.in" ,ios::in);
ofstream g ("heapuri.out" ,ios::out);
const int MAX = 200002;
vector <long int> HEAP, POS, L ;
/*
EL.resize ( MAX + 1 );
HEAP.push_back (0);
POS.push_back (0);
NTH_EL.push_back (0);
*/
void minHP () {
g<<HEAP [ 1 ]<<"\n";
}
void mySwap ( int &i ,int j){
swap ( HEAP [ i ] , HEAP [ j ] ) ;
swap ( L [ i ] , L [ j ] ) ;
swap ( POS [ L [ i ] ] , POS [ L [ j ] ] );
i = j;
}
template <class T>
void pushHP ( T el){
HEAP.push_back(el);
int i = HEAP.size() - 1;
int POS_aux, NTH_aux;
while( i > 1 && HEAP [i] < HEAP [i/2] ){
mySwap( i , i/2 );
}
}
void HPdown ( int i ){
bool FINHP = 0;
int j ;
while ( !FINHP && 2*i < HEAP.size() ){
FINHP = 1;
if ( HEAP [ i ] > HEAP [2*i ] ){
j = 2*i;
FINHP = 0;
}
if ( 2*i+ 1 <HEAP.size() && HEAP [ i ] > HEAP [2*i + 1 ] && HEAP [ 2*i + 1] < HEAP [ 2*i ] ){
j = 2*i + 1;
FINHP = 0;
}
if( !FINHP ){
mySwap( i , j);
}
}
}
template <class T>
void delHP( T poz ){
int i = HEAP.size() - 1;
int x = POS [ poz ];
mySwap ( i , POS [ poz ] ) ;
HEAP.pop_back();
HPdown( x );
}
int main(){
int n , x, y;
HEAP.push_back( 0 );
POS.push_back ( 0 );
L.push_back( 0 );
f>>n;
while (n--){
f>>x;
if(x == 1){
f>>y;
POS.push_back ( POS.size() );
L.push_back( L.size() );
pushHP ( y );
}
if( x == 2){
f>>y;
delHP ( y );
}
if( x== 3)
minHP();
}
}