Cod sursa(job #2586930)

Utilizator Tudor_Trasculescu123Tudor Trasculescu Tudor_Trasculescu123 Data 21 martie 2020 19:15:12
Problema Heapuri Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>
#define NMAX 200005

using namespace std;
ifstream fin("heapuri.in") ;
ofstream fout("heapuri.out") ;

int n, op, x, k, m;
int v[NMAX], a[NMAX] ;

void adauga(int k)
{
    while(v[k] < v[k/2])
    {
        swap(v[k] , v[k/2]) ;
        k = k / 2 ;
    }
}

int Find(int x)
{
    for(int i=1; i<=k; i++)
        if(v[i] == x)
            return i ;
}

void sterge(int node)
{
    while(2*node <= k && 2*node+1 <= k)
    {
        if(v[2*node] < v[2*node+1])
        {
            swap(v[node] , v[2*node]) ;
            node = 2*node ;
        }
        else
        {
            swap(v[node] , v[2*node+1]) ;
            node = 2*node + 1 ;
        }
    }
    swap(v[node] , v[k]) ;
}

int main()
{
    fin >> n ;
    for(int i=1; i<=n; i++)
    {
        fin >> op ;
        if(op == 1 || op == 2)
        {
            fin >> x ;
            if(op == 1)
            {
                v[++k] = x ;
                a[++m] = x ;
                adauga(k) ;
            }
            else
            {
                int node = Find(a[x]) ;
                sterge(node) ;
                k -- ;
            }
        }
        else
            fout << v[1] << "\n" ;
    }

    return 0;
}