Cod sursa(job #1791965)

Utilizator zdavid112zIon David-Gabriel zdavid112z Data 29 octombrie 2016 21:27:38
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

struct Numar
{
    int v, i;
};

bool cmp(const Numar& a, const Numar& b)
{
    return a.v > b.v;
}

vector<Numar> v;
char a[1000000001] = {0};
int n, i, m = 0;

int main()
{
    int op, x;
    freopen("heapuri.in", "r", stdin);
    freopen("heapuri.out", "w", stdout);
    scanf("%d", &n);
    for(i = 0; i < n; i++)
    {
        scanf("%d", &op);
        if(op == 1)
        {
            Numar nr;
            scanf("%d", &x);
            nr.v = x;
            nr.i = m++;
            v.push_back(nr);
            push_heap(v.begin(), v.end(), cmp);
        }
        else if(op == 2)
        {
            scanf("%d", &x);
            a[x] = 1;
        }
        else
        {
            while(a[v.front().i] == 1)
            {
                pop_heap(v.begin(), v.end(), cmp);
                v.pop_back();
            }
            printf("%d\n", v.front().v);
        }
    }
    return 0;
}