Pagini recente » Cod sursa (job #2851500) | Cod sursa (job #2012412) | Cod sursa (job #3279348) | Cod sursa (job #519500) | Cod sursa (job #2895922)
#include <fstream>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<pair<long long , long long >> v;
vector<long long > p;
void afisare(vector<long long > v)
{
for (size_t i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
}
void fini()
{
cout << "\n----------\n-p--";
afisare(p);
cout << "\n-h--";
for (size_t i = 0; i < v.size(); i++)
{
cout << v[i].first << "<->" << v[i].second << " ";
}
cout << "\n----------\n";
}
void schimb(long long old, long long neww)
{
swap(v[old], v[neww]);
swap(p[v[old].second], p[v[neww].second]);
}
void sus(long long pozitie)
{
while ((pozitie - 1) / 2 >= 0 and v[(pozitie - 1) / 2].first > v[pozitie].first)
{
schimb((pozitie - 1) / 2, pozitie);
pozitie = (pozitie - 1) / 2;
}
}
void jos(long long pozitie)
{
if (v.size() <= pozitie * 2 + 1)
{
return;
}
long long pozMin = pozitie * 2 + 1;
if (v.size() > pozitie * 2 + 2)
{
pozMin = (v[pozitie * 2 + 1].first < v[pozitie * 2 + 2].first) ? pozitie * 2 + 1 : pozitie * 2 + 2;
}
if (v[pozitie].first < v[pozMin].first)
return;
schimb(pozitie, pozMin);
jos(pozitie);
}
int main()
{
ifstream cin("heapuri.in");
ofstream cout("heapuri.out");
// ifstream cin("../../Downloads/grader_test1.in");
// ifstream cin("grader_test2.in");
// ifstream cin("dec.py");
long long n, rdcn, pozSterge, lgr, mrm;
cin >> n;
long long x = 0, add, pozz;
for (long long i = 0; i < n; i++)
{
cin >> lgr;
// cout << i << ' ' << lgr << endl;
if (lgr == 1)
{
cin >> add;
v.push_back(make_pair(add, x));
p.push_back(x);
sus(v.size() - 1);
x++;
}
else if (lgr == 2)
{
cin >> pozSterge;
pozSterge--;
if (p[pozSterge] == v.size() - 1)
{
// p[pozSterge] = -1;
v.pop_back();
continue;
}
pozz = p[pozSterge];
p[v.back().second] = p[pozSterge];
v[pozz] = v.back();
v.pop_back();
// p[pozSterge] = -1;
sus(pozz);
jos(pozz);
}
else
{
cout << v[0].first << "\n";
}
}
// fini();
}