Pagini recente » Istoria paginii runda/simulareoji_2008_11-12 | Cod sursa (job #2006995) | Cod sursa (job #463969) | Istoria paginii runda/lanitam_urtimud/clasament | Cod sursa (job #2013605)
#include<fstream>
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
int sz,arb[200001],pozitie[200000];
void adauga( int val ){
sz++;
arb[sz] = val;
pozitie[val] = sz;
int poz = sz;
while( poz > 1 && val < arb[poz/2] ){
swap( pozitie[arb[poz]],pozitie[arb[poz/2]] );
swap( arb[poz],arb[poz/2] );
poz /= 2;
}
pozitie[val] = poz;
return;
}
void sterge( int poz ){
swap( pozitie[arb[sz]], pozitie[arb[poz]] );
swap( arb[sz],arb[poz] );
arb[sz] = 0;
sz--;
int val = arb[poz];
while( poz > 1 && val < arb[poz/2]){
swap( pozitie[arb[poz]],pozitie[arb[poz/2]] );
swap( arb[poz],arb[poz/2] );
poz /= 2;
}
while( poz*2 <= sz ){
int aux = poz * 2;
if( aux+1 <= sz && arb[aux+1] < arb[aux] )
aux++;
if( arb[poz] > arb[aux] ){
swap( pozitie[arb[poz]], pozitie[arb[aux]] );
swap( arb[poz], arb[aux] );
poz = aux;
}
else{
break;
}
}
return;
}
int n,i,t,y,x,cron[200001],s;
int main(){
in >> n;
for( i = 1; i <= n; i ++ ){
in >> t;
if( t == 3 ){
out<<arb[1]<<"\n";
}
if( t == 2 ){
in >> x;
sterge( pozitie[cron[ x ]] );
}
if( t == 1 ){
in >> x;
adauga( x );
cron[++s] = x;
}
}
return 0;
}