Pagini recente » Cod sursa (job #681577) | Cod sursa (job #2257417) | Cod sursa (job #1752177) | Cod sursa (job #689592) | Cod sursa (job #3187854)
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int heap[200001], n, s, ind[200001];
int main(){
fin >> n;
for(int i = 1; i <= n; i++){
int c, x, y;
fin >> c;
if(c == 1){
fin >> heap[s];
int son = s, dad = (son - 1) / 2;
ind[son] = s + 1;
while (dad >= 0 && heap[dad] > heap[son])
{
swap(heap[dad], heap[son]);
swap(ind[dad], ind[son]);
son = dad;
dad = (son - 1) / 2;
}
s++;
}
if(c == 2){
fin >> x;
for(int j = 0; j < s; j++) if(ind[j] == x) y = j;
swap(heap[s - 1], heap[y]);
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;
}