Pagini recente » Cod sursa (job #1870514) | Cod sursa (job #2370966) | Cod sursa (job #264543) | Cod sursa (job #2968079) | Cod sursa (job #388623)
Cod sursa(job #388623)
#include<fstream>
#define max 200001
using namespace std;
long long n,dim,nr;
long long h[max];
long long p[max];
long long v[max];
void swap(long long &a, long long &b){
long long aux=a;
a = b;
b = aux;
}
void down(int x){
long long fs,fd;
while(1){
fs = 2*x;
if( fs > dim ) break;
fd = 2*x + 1;
if( fd <= dim && v[ h[fd] ] <= v[ h[fs] ] ) fs=fd;
if( v[ h[fs] ] >= v[ h[x] ] ) break;
swap ( h[fs], h[x] );
p [ h[fs] ] = fs;
p [ h[x] ] = x ;
x=fs;
}
}
void up(long long poz){
long long tata=poz>>1;
long long x = h[poz];
while( poz>1 && v[ x ] < v [ h[tata] ] ){
swap( h[poz], h[tata] );
p [ h[poz] ] = poz;
p [ h[tata] ] = tata ;
poz = tata;
tata >>=1;
}
}
void add( int x ){
v[++nr] = x;
p[nr]=nr;
h[++dim]=nr;
up(dim);
}
void del( int x ){
swap( h[ p[x] ], h[dim] );
p[ h[dim] ] = p[x];
--dim;
down(p[x]);
}
int main(){
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int o,x;
f>>n;
for( ; n ; --n ){
f>>o;
if ( o <=2 ){
if( o==1 ) {
f>>x;
add(x);continue; }
else if( o==2 ) {
f>>x;
del(x);continue; }
}
g<<v[h[1]]<<'\n';
}
return 0;
}