Pagini recente » Cod sursa (job #1526057) | Cod sursa (job #1504557) | Cod sursa (job #2353356) | Cod sursa (job #2381144) | Cod sursa (job #2893243)
#include <fstream>
#include <vector>
using namespace std;
struct nod{
long long valoare;
long long pozitie;
long long introdus;
long long get_pozitie(long long i){if(i == introdus) return pozitie;}
nod(long long v,long long poz,long long i){valoare=v;pozitie=poz;introdus = i;}
};
vector <nod> heap;
long long i;
long long introdus = 1;
void urca(long long poz)
{
while (poz)
{
if(heap[(poz-1)/2].valoare>heap[poz].valoare) {
swap(heap[(poz - 1) / 2].valoare, heap[poz].valoare);
swap(heap[(poz - 1) / 2].introdus, heap[poz].introdus);
poz = (poz-1)/2;
}
else
break;
}
}
void coboara(long long poz) {
if (poz * 2 + 1 >= heap.size())
return;
long long fiu_st = heap[poz * 2 + 1].valoare;
if ((poz * 2 + 2 == heap.size()) || fiu_st < heap[poz * 2 + 2].valoare) {
if (fiu_st < heap[poz].valoare) {
swap(heap[poz].valoare, heap[poz * 2 + 1].valoare);
swap(heap[poz].introdus, heap[poz * 2 + 1].introdus);
coboara(poz * 2 + 1);
return;
} else {
return;
}
} else {
if (heap[poz * 2 + 2].valoare < heap[poz].valoare) {
swap(heap[poz].valoare, heap[poz * 2 + 2].valoare);
swap(heap[poz].introdus, heap[poz * 2 + 2].introdus);
coboara(poz * 2 + 2);
return;
} else {
return;
}
}
}
int main()
{
ifstream f("heapuri.in");
ofstream g("heapuri.out");
long long n,op,nr,poz;
f>>n;
long long k = 0;
for(i = 1;i<=n;i++) {
f >> op;
switch (op) {
case 1: {
f >> nr;
nod nd(nr,k,introdus);
heap.push_back(nd);
urca(k);
introdus++;
k++;
break;
}
case 2: {
f >> poz;
long long j;
k--;
for(j = 0;j<heap.size();j++)
if(heap[j].introdus == poz)
break;
heap[j].valoare = heap[heap.size() - 1].valoare;
heap[j].introdus = heap[heap.size() - 1].introdus;
heap.pop_back();
urca(heap[j].pozitie);
coboara(heap[j].pozitie);
break;
}
case 3: {
g << heap[0].valoare << '\n';
break;
}
}
}
f.close();
g.close();
return 0;
}