Cod sursa(job #3325090)

Utilizator marap2011Paun Mara marap2011 Data 24 noiembrie 2025 18:19:41
Problema Heapuri Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#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';
    }
}