Pagini recente » Cod sursa (job #1404858) | Cod sursa (job #772796) | Cod sursa (job #1218832) | Cod sursa (job #1774023) | Cod sursa (job #3187849)
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int heap[10], n, s, ind[200001];
int main(){
fin >> n;
for(int i = 1; i <= n; i++){
int c, x;
fin >> c;
if(c == 1){
fin >> heap[s];
int son = s, dad = (son - 1) / 2;
ind[i] = son;
while (dad >= 0 && heap[dad] > heap[son])
{
swap(heap[dad], heap[son]);
ind[i] = dad;
son = dad;
dad = (son - 1) / 2;
}
s++;
}
if(c == 2){
fin >> x;
swap(heap[s - 1], heap[ind[x]]);
s--;
int rightChild = 2 * ind[x] + 2, leftChild = rightChild - 1, i = ind[x];
while (leftChild < s)
{
int smallestChild = leftChild;
if(rightChild < s && heap[rightChild] < heap[leftChild]) smallestChild = rightChild;
if(heap[i] < heap[smallestChild]) break;
else swap(heap[i], heap[smallestChild]);
i = smallestChild;
rightChild = 2 * i + 2, leftChild = rightChild - 1;
}
}
if(c == 3) fout << heap[0] << '\n';
}
fin.close();
fout.close();
return 0;
}