Pagini recente » Cod sursa (job #1484231) | Cod sursa (job #2793787) | Rating Costea Ovidiu Tudor (ovidiu01) | Cod sursa (job #1415912) | Cod sursa (job #1628455)
#include<stdio.h>
#include<algorithm>
#define MAXN 200005
FILE *f=fopen("heapuri.in","r"), *g=fopen("heapuri.out","w");
using namespace std;
int N, T, X, lCron=0, Cron[MAXN], lHP=0, HP[MAXN], poz[MAXN];
void inv( int &P1, int P2 ){
swap( HP[P1], HP[P2] );
swap( poz[HP[P1]], poz[HP[P2]] );
P1 = P2;
}
void Echilibreaza( int p ){
int NEWCron, NEWp;
//in sus
while( p > 1 && Cron[ HP[p] ] < Cron[ HP[p/2] ] )
inv( p, p/2 );
//in jos
while( p*2 <= lHP ){
NEWCron = Cron[ HP[p*2] ];
NEWp = p*2;
if( p*2+1 <= lHP && Cron[ HP[p*2+1] ] < NEWCron ){
NEWCron = Cron[ HP[p*2+1] ];
NEWp = p*2+1;
}
if( Cron[ HP[p] ] > NEWCron )
inv( p, NEWp );
else
break;
}
}
int main(){
fscanf(f,"%d\n",&N);
for(int i=1;i<=N;i++){
fscanf(f,"%d",&T);
if( T == 1 ){
fscanf(f,"%d",&X);
Cron[++lCron] = X;
HP[++lHP] = lCron;
poz[lCron] = lHP;
Echilibreaza(lHP);
}
if( T == 2 ){ // eliminare
fscanf(f,"%d",&X);
HP[ poz[X] ] = HP[ lHP ];
poz[ HP[lHP] ] = poz[X];
lHP--;
Echilibreaza( poz[X] );
}
if( T == 3 )
fprintf(g,"%d\n",Cron[HP[1]]);
}
return 0;
}