Cod sursa(job #1988963)

Utilizator victoreVictor Popa victore Data 5 iunie 2017 13:28:16
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<cstdio>
#include<vector>
#include<queue>

using namespace std;

const int nmax=200005;

int v[nmax];

struct cmp
{
    bool operator() (const int &x, const int &y)
    {
        return x>y;
    }
};

priority_queue <int, vector<int> , cmp> heap,secondary;

int main()
{
    freopen("heapuri.in","r",stdin);
    freopen("heapuri.out","w",stdout);
    int n,i,op,x,cnt=0;
    scanf("%d",&n);
    for(i=1;i<=n;++i)
    {
        scanf("%d",&op);
        if(op!=3)
        {
            scanf("%d",&x);
            if(op==2)
                secondary.push(v[x]);
            else
            {
                v[++cnt]=x;
                heap.push(x);
            }
        }
        else
        {
            while(!(secondary.empty()) && secondary.top()==heap.top())
            {
                secondary.pop();
                heap.pop();
            }
            printf("%d\n",heap.top());
        }
    }
}