Pagini recente » Cod sursa (job #809486) | Cod sursa (job #2353672) | Cod sursa (job #2369198) | Cod sursa (job #2773315) | Cod sursa (job #1711479)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
struct nod {
int val;
int poz;
};
vector<nod> heap;
vector<int> pozitii;
int heapSize;
void insertToHeap(int nr) {
int poz=heap.size();
heap.push_back({nr,pozitii.size()});
pozitii.push_back(poz);
while(heap[poz].val<heap[poz/2].val&&poz>1) {
swap(pozitii[heap[poz].poz],pozitii[heap[poz/2].poz]);
swap(heap[poz],heap[poz/2]);
poz=poz/2;
}
}
void removeFromHeap(int nr) {
int poz=pozitii[nr];
swap(heap[poz],heap[heap.size()-1]);
heap.pop_back();
while(2*poz<heap.size()&&heap[poz].val>min(heap[2*poz].val,heap[2*poz+1].val)) {
if(heap[2*poz].val<heap[2*poz+1].val||2*poz+1>=heap.size()) {
swap(pozitii[heap[poz].poz],pozitii[heap[2*poz].poz]);
swap(heap[poz],heap[2*poz]);
poz=2*poz;
}
else if(heap[2*poz+1].val<heap[2*poz].val) {
swap(pozitii[heap[poz].poz],pozitii[heap[2*poz+1].poz]);
swap(heap[poz],heap[2*poz+1]);
poz=2*poz+1;
}
}
}
int main()
{
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int n,op,nr;
fin>>n;
heap.push_back({0,0});
pozitii.push_back(0);
for(int i=1;i<=n;i++) {
fin>>op;
if(op==1) {
fin>>nr;
insertToHeap(nr);
}
else if(op==2) {
fin>>nr;
removeFromHeap(nr);
}
else
fout<<heap[1].val<<'\n';
}
return 0;
}