Cod sursa(job #1789294)

Utilizator Emil64Emil Centiu Emil64 Data 26 octombrie 2016 20:57:47
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

bool cmp(int &a, int&b){
    return (a>b);
}


int main()
{
    bool sters[200001]={0};
    int o[200001]={0};
    vector <int> v;
    int i, j, n, cr, nr, lg=0, pos;
    freopen ("heapuri.in", "r", stdin);
    freopen ("heapuri.out", "w", stdout);
    scanf("%d ", &n);
    for(i=1;i<=n;i++){

        scanf("%d", &cr);
        if(cr==1){

            scanf("%d", &nr);
            o[++lg]=nr;
            v.push_back(nr);
            push_heap(v.begin(), v.end(), cmp);
        }
        if(cr==2){
             scanf("%d", &nr);
             sters[nr]=true;
        }
        if(cr==3){

            for(i=1;i<=lg;i++)
                if(v.front()==o[i])
                    pos=i;
            while(sters[pos]){
                pop_heap(v.begin(),v.end(),cmp);
                v.pop_back();
                for(i=1;i<=n;i++)
                    if(v.front()==o[i])
                        pos=i;
            }
            printf("%d\n", v.front());
        }
    }

}