Pagini recente » Cod sursa (job #1148924) | Monitorul de evaluare | Cod sursa (job #130813) | Cod sursa (job #781093) | Cod sursa (job #3325090)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("heapuri.in");
ofstream fout ("heapuri.out");
const int nmax = 2e5+5 ;
int n , nr , v[nmax] , a[nmax] , poz[nmax] ;
void heapup (int x)
{
if ( x > 1 && v[a[x]] < v[a[x/2]] )
{
swap( a[x] , a[x/2] ) ;
poz[a[x]] = x ;
poz[a[x/2]] = x / 2 ;
heapup(x/2) ;
}
}
void heapdw ( int x )
{
int y = x ;
if ( 2 * x <= n && v[a[2*x]] < v[a[y]] )
y = 2 * x ;
if ( 2 * x + 1 <= n && v[a[2*x+1]] < v[a[y]] )
y = 2 * x + 1 ;
if ( x != y )
{
swap ( a[x] , a[y] ) ;
poz[a[x]] = x ;
poz[a[y]] = y ;
heapdw(y) ;
}
}
int main()
{
int o;
fin >> o;
for ( int i = 1 ; i <= o ; i ++ )
{
int q ;
fin >> q ;
if ( q == 1 )
{
int val ;
fin >> val ;
nr ++ ;
n ++ ;
v[nr] = val ;
a[n] = nr ;
poz[nr] = n ;
heapup (n) ;
}
else if ( q == 2 )
{
int val ;
fin >> val;
v[val] = -1 ;
heapup ( poz[val] ) ;
poz[a[1]] = 0 ;
n -- ;
a[1] = a[n] ;
poz[a[1]] = 1 ;
if ( n > 1 )
heapdw(1) ;
}
else
fout << v[a[1]] << '\n';
}
}