Pagini recente » Cod sursa (job #1226147) | Cod sursa (job #887842) | Cod sursa (job #25484) | Cod sursa (job #1371238) | Cod sursa (job #1430799)
#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 <int> HEAP, POS ;
int EL [1000000003];
/*
EL.resize ( MAX + 1 );
HEAP.push_back (0);
POS.push_back (0);
NTH_EL.push_back (0);
*/
void minHP () {
g<<HEAP [ 1 ]<<"\n";
}
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] ){
swap ( POS [ EL [ HEAP [ i ] ] ] , POS [ EL [ HEAP [ i/2 ] ] ]);
swap ( HEAP [ i ] , HEAP [ i/2 ] );
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 ){
swap ( POS [ EL [ HEAP [ i ] ] ] , POS [ EL [ HEAP [ j ] ] ]);
swap ( HEAP [ i ] , HEAP [ j ] );
i = j;
}
}
}
template <class T>
void delHP( T poz ){
int i = HEAP.size() - 1;
int x = POS [ poz ] ;
swap ( POS [ EL [ HEAP [ i ] ] ] , POS [ poz ] );
swap ( HEAP [ i ] , HEAP [ POS [ EL [ HEAP [ i ] ] ] ]) ;
HEAP.pop_back();
HPdown( x );
}
int main(){
int n , x, y;
HEAP.push_back( 0 );
POS.push_back ( 0 );
// EL.resize ( 1000000000 );
f>>n;
while (n--){
f>>x;
if(x == 1){
f>>y;
POS.push_back ( POS.size() );
EL [ y ] = POS.back();
pushHP ( y );
}
if( x == 2){
f>>y;
delHP ( y );
}
if( x== 3)
minHP();
}
}