Pagini recente » Cod sursa (job #1141742) | Cod sursa (job #701321) | Cod sursa (job #3001573) | Cod sursa (job #1699023) | Cod sursa (job #1042375)
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
const int nmax= 200000;
int n, l;
int v[nmax+1], a[nmax+1], p[nmax];
void swap( int x, int y ) {
int aux= v[x];
v[x]= v[y];
v[y]= aux;
p[v[x]]= x;
p[v[y]]= y;
}
void insert ( int x ) {
for ( ; x/2>=0 && a[v[x]]<a[v[x/2]]; x/=2 ) {
swap(x, x/2);
}
}
void del ( int p1 ) {
int p2= 0;
while ( p1!=p2 ) {
p2= p1;
if ( 2*p2<=l && a[v[p1]]>a[v[2*p2]] ) {
p1= p2*2;
}
if ( 2*p2+1<=l && a[v[p1]]>a[v[2*p2+1]] ) {
p1= p2*2+1;
}
swap(p1, p2);
}
}
int main( ) {
int m;
fin>>m;
for ( ; m>0; --m ) {
int k;
fin>>k;
if ( k==3 ) {
fout<<a[v[1]]<<"\n";
} else {
int x;
fin>>x;
if ( k==1 ) {
++n;
a[n]= x;
++l;
v[l]= n;
p[n]= l;
insert(l);
} else {
a[x]= -1;
insert(p[x]);
p[v[1]]= 0;
v[1]= v[l];
--l;
p[v[1]]= 1;
if ( l>=2 ) {
del(1);
}
}
}
}
return 0;
}