Pagini recente » Cod sursa (job #2355185) | Cod sursa (job #1085980) | Cod sursa (job #2723901) | Cod sursa (job #2893213) | Cod sursa (job #2892630)
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
using namespace std;
vector<long long > heap;
vector<long long > ordine;
void urca(long long pozitie)
{
while (pozitie != 0)
{
if(heap[(pozitie-1)/2]>heap[pozitie]) {
long long aux;
aux= heap[(pozitie-1)/2];
heap[(pozitie-1)/2]= heap[pozitie];
heap[pozitie] = aux;
pozitie = (pozitie-1)/2;}
else
break;
}
}
void coboara(long long cautat)
{
long long pozitie;
for (pozitie = 0; pozitie< heap.size(); ++pozitie)
if(heap[pozitie] == cautat)
break;
while (pozitie*2+1 < heap.size())
{
if(pozitie*2+2<heap.size()) {
if (heap[pozitie * 2 + 1] < heap[pozitie * 2 + 2]) {
swap(heap[pozitie],heap[pozitie*2+1]);
pozitie = pozitie * 2 + 1;
} else
{
long long aux;
aux = heap[pozitie * 2 + 2];
heap[pozitie * 2 + 2] = heap[pozitie];
heap[pozitie] = aux;
pozitie = pozitie * 2 + 2;
}
} else {
long long aux;
aux = heap[pozitie * 2 + 1];
heap[pozitie * 2 + 1] = heap[pozitie];
heap[pozitie] = aux;
pozitie = pozitie * 2 + 1;
}
}
if(pozitie+1<heap.size())
swap(heap[pozitie+1],heap[pozitie]);
}
int main() {
ifstream f("heapuri.in");
ofstream g("heapuri.out");
long long n,i,op,nr;
f>>n;
long long poz = 0;
for(i = 0;i<n;i++)
{
f>>op;
if(op != 3) {
f >> nr;
if(op == 1)
{
ordine.push_back(nr);
heap.push_back(nr);
urca(poz);
poz++;
} else if (op == 2)
{
coboara(ordine[nr-1]);
heap.pop_back();
poz--;
}
} else
g<<heap[0]<<'\n';
}
f.close();g.close();
return 0;
}