Cod sursa(job #1791416)

Utilizator Emil64Emil Centiu Emil64 Data 29 octombrie 2016 12:51:46
Problema Heapuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.68 kb
#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

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

//bool sters[100000001]={0};
int o[200001]= {0};
vector <int> v;

int main()
{
    int i, j, n, cr, nr, lg=0;
    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);
            o[nr]*=(-1);
        }
        if(cr==3)
        {

            int p;
            bool sters=false;
            p=v.front();
            for(j=1; j<=lg; j++)
            {
                if(o[j] == p)
                {
                    sters = false;
                    break;
                }
                else if(o[j] == (-p))
                {
                    sters = true;
                    break;
                }
            }

            while(sters)
            {
                pop_heap(v.begin(),v.end(),cmp);
                v.pop_back();
                p=v.front();
                sters = false;
                for(j=1; j<=lg; j++)
                {
                    if(o[j] == p)
                    {
                        sters = false;
                        break;
                    }
                    else if(o[j] == (-p))
                    {
                        sters = true;
                        break;
                    }
                }
            }
            printf("%d\n", v.front());
        }
    }

}