Pagini recente » Istoria paginii utilizator/caheman | Istoria paginii utilizator/andreimocian | Statistici Alexandru Pokharel (Vertex10) | Istoria paginii utilizator/spiderboy193 | Cod sursa (job #1403485)
#include <fstream>
#include <climits>
#include <vector>
#include <algorithm>
std::ifstream be("heapuri.in");
std::ofstream ki("heapuri.out");
struct tipus
{
int ertek, sorszam;
};
std::vector<tipus> kupac;
std::vector<int> poz;
int aktsorszam;
void fel (int p)
{
while (kupac[p/2].ertek > kupac[p].ertek) {
std::swap (kupac[p/2], kupac[p]);
poz[kupac[p/2].sorszam] = p/2;
poz[kupac[p].sorszam] = p;
p /= 2;
}
}
void le (int p)
{
int min1;
while (p*2 <= kupac.size()-1) {
if (p*2+1 > kupac.size()-1) min1 = p*2;
else min1 = kupac[p*2].ertek < kupac[p*2+1].ertek ? p*2 : p*2+1;
if (kupac[p].ertek > kupac[min1].ertek) {
std::swap (kupac[p], kupac[min1]);
poz[kupac[p].sorszam] = p;
poz[kupac[min1].sorszam] = min1;
p = min1;
}
else break;
}
}
void betesz_kupac (tipus x)
{
kupac.push_back (x);
poz.push_back (x.sorszam);
fel (kupac.size()-1);
}
void kivesz_kupac (int p)
{
kupac[p] = kupac.back();
poz[kupac[p].sorszam] = p;
kupac.pop_back();
le (p);
}
int main()
{
tipus tmp;
int n, i, op1, op2;
tmp.ertek = INT_MIN;
tmp.sorszam = 0;
aktsorszam = 0;
kupac.push_back (tmp);
poz.push_back (0);
be >> n;
for (i=1; i<=n; i++) {
be >> op1;
if (op1 == 1) {
be >> op2;
aktsorszam++;
tmp.sorszam = aktsorszam;
tmp.ertek = op2;
betesz_kupac (tmp);
}
else if (op1 == 2) {
be >> op2;
kivesz_kupac (poz[op2]);
}
else if (op1 == 3) {
ki << kupac[1].ertek << "\n";
}
}
}