Pagini recente » Cod sursa (job #1992794) | Cod sursa (job #2277795) | Cod sursa (job #1366109) | Cod sursa (job #204859) | Cod sursa (job #2745080)
#include <fstream>
#include <vector>
#include <iostream>
using namespace std;
int nrOp, op;
vector<int> myHeap;
vector<int> temp;
void heapify(int i){
int size = myHeap.size();
int smallest = i;
int l = (2*i) + 1; // left child
int r = (2*i) + 2; // right child
if (l < size && myHeap[l] < myHeap[smallest])
smallest = l;
if (r < size && myHeap[r] < myHeap[smallest])
smallest = r;
if (smallest != i){
swap(myHeap[smallest], myHeap[i]);
heapify(smallest);
}
}
void inserare(int elem){
int size = myHeap.size();
if (size == 0){
myHeap.push_back(elem);
temp.push_back(elem);
}
else{
myHeap.push_back(elem);
for (int i = size / 2 - 1; i >= 0; i--)
heapify(i);
}
}
int gaseste(int elem){
for (int i = 0; i < myHeap.size(); i++)
if (elem == myHeap[i])
return i;
}
void elimina(int poz){
int elem = temp[poz - 1];
int poz_in_heap = gaseste(elem);
swap(myHeap[poz_in_heap], myHeap[myHeap.size() - 1]);
myHeap.pop_back();
for (int i = myHeap.size() / 2 - 1; i >= 0; i--)
heapify(i);
}
int peek(){
return myHeap[0];
}
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int main(){
f >> nrOp;
for (int i = 0; i < nrOp; i++){
f >> op;
switch (op){
case 1:
f >> op;
inserare(op);
break;
case 2:
f >> op;
elimina(op);
break;
case 3:
g << peek() << endl;
break;
}
}
return 0;
}