Pagini recente » Cod sursa (job #2924216) | Cod sursa (job #2352081) | Cod sursa (job #2163900) | Cod sursa (job #1596322) | Cod sursa (job #1149610)
#include <fstream>
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
const int NMAX = 200000;
int H[NMAX+1], a[NMAX+1], p[NMAX+1];
int N, nr_e, nr_i;
void schimba( int a, int b )
{
int aux;
aux= H[b];
H[b]= H[a];
H[a]= aux;
p[ H[a] ]= a;
p[ H[b] ]= b;
}
void plaseaza_sus( int poz ) {
int tata= poz/2;
if ( tata > 0 ) {
if ( a[ H[tata] ] > a[ H[poz] ] )
{
schimba( tata, poz );
plaseaza_sus( tata );
}
}
}
void plaseaza_jos( int poz ) {
int fiu= poz*2;
if ( fiu <= nr_e ) {
if ( fiu+1 <= nr_e ) {
if ( a[ H[fiu+1] ] < a[ H[fiu] ] ) fiu++;
}
if ( a[ H[fiu] ] < a[ H[poz] ] )
{
schimba( fiu , poz );
plaseaza_jos( fiu );
}
}
}
void operatie_1() {
int x;
in >> x;
a[ ++nr_i ]= x;
p[ nr_i ]= nr_e;
H[ ++nr_e ]= nr_i;
plaseaza_sus( nr_e );
}
void operatie_2() {
int y,x;
in >> x;
y= p[x];
schimba( p[x], nr_e );
--nr_e;
plaseaza_jos( y );
}
void operatie_3() {
out << a[ H[1] ];
out << '\n';
}
int main() {
in >> N;
for( int i= 0; i<N; i++ ) {
int op;
in >> op;
if( op == 1 ) operatie_1();
else if( op == 2 ) operatie_2();
else operatie_3();
}
return 0;
}