Cod sursa(job #804965)

Utilizator alexarnautuArnautu Alexandru alexarnautu Data 30 octombrie 2012 19:19:06
Problema Heapuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <cstdio>
#include <vector>

using namespace std;

FILE * iFile;
FILE * oFile;

vector<int> a;
int n, k, x, c, V[200001];

void heapdown(int P, int L)
{
    int F = 2 * P, aux;
    if(F > L) return;
    if(F < L)
        if(V[F] > V[F+1])
            F++;
    if(V[P] > V[F])
    {
        aux = V[P];
        V[P] = V[F];
        V[F] = aux;
        heapdown(F, L);
    }
}

void heapup(int P)
{
    int T = P/2, aux;
    if(!T) return;
    if(V[T] > V[P])
    {
        aux = V[T];
        V[T] = V[P];
        V[P] = aux;
        heapup(T);
    }
}

int main()
{
    iFile = fopen("heapuri.in", "r");
    oFile = fopen("heapuri.out", "w");

    fscanf(iFile, "%d", &k);

    for(int i=1;i<=k;i++)
    {
        fscanf(iFile, "%d", &c);
        if(c==1)
        {
            fscanf(iFile, "%d", &x);
            V[++n] = x;
            a.push_back(x);
            heapup(n);
        }
        if(c==2)
        {
            fscanf(iFile, "%d", &x);
            for(int j=1;j<=n;j++)
                if(V[j] == a[x-1])
                    V[j] = V[n], heapup(j), n--, heapdown(j, n);
        }
        if(c==3)
            fprintf(oFile, "%d\n", V[1]);
    }

    fclose(iFile);
    fclose(oFile);

    return 0;
}