Cod sursa(job #1869984)

Utilizator sculap1234321Panainte Alexandru sculap1234321 Data 6 februarie 2017 11:55:12
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>

using namespace std;
int poz[200005], val[200005], init[200005];

int n, i, x, op, m, p;

void Push(int x)
{   int k, tata;
    val[++n] = x; k = n;
    poz[x]=n;

    while(k > 1)
    {
        tata = k/2;
        if(val[k] >= val[tata])
            return;
        swap(val[k],val[tata]);
        swap(poz[val[k]],poz[val[tata]]);
        k = tata;
    }
}
void Pop(int k)
{   int fiu;
    val[k] = val[n];
    poz[val[n]] = k;
    n--;
    while(2*k <= n)
    {
        fiu = 2*k;
        if(fiu+1 <= n && val[fiu] > val[fiu+1])
            fiu++;

        if(val[k] <= val[fiu]) return;
        swap(val[k],val[fiu]);
        swap(poz[val[k]],poz[val[fiu]]);
        k = fiu;
    }
}
int main()
{   int k = 0;
    ifstream fin("heap.in");
    ofstream fout("heap.out");
    fin >> m;
    for(i = 1; i <= m; i++)
    {   fin >> op;
        if(op == 1)
        {

            fin >> x;
            k++;
            init[k] = x;
            Push(x);
        }
        else if(op == 2)
        {   fin >> x;
            x = poz[x];
            x = init[x];
            Pop(x);
        }
        else

            fout << val[1] <<"\n";

    }
    return 0;
}