Pagini recente » Cod sursa (job #2786503) | Cod sursa (job #410150) | Cod sursa (job #2368614) | Cod sursa (job #1773028) | Cod sursa (job #2154249)
#include<iostream>
#include<vector>
#include<fstream>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
int n;
std::vector<int> heap;
std::vector<int> stack_order;
void min_heapify(int y)
{
int parent = (y-1)/2;
if(heap[y] < heap[parent])
{
int aux = heap[y];
heap[y] = heap[parent];
heap[parent] = aux;
if(parent != 0) min_heapify(parent);
}
}
void build_heap(int x)
{
heap.push_back(x);
if(heap.size()-1 != 0) min_heapify(heap.size()-1);
}
void restore_heap(int x)
{
int ch1 = 2*x+1;
int ch2 = 2*x+2;
int m,m_pos;
if(heap[ch1] < heap[ch2]) m=heap[ch1],m_pos = ch1;
else m=heap[ch2],m_pos = ch2;
if(heap[x] > m)
{
int aux = heap[x];
heap[x] = m;
heap[m_pos] = aux;
restore_heap(m_pos);
}
}
void search_and_delete(int x)
{
int del = stack_order[x-1];
cout<<del<<" ";
int i = 0;
while(heap[i] != del) i++;
heap[i] = heap[heap.size()-1];
heap.pop_back();
if(i != 0 && i != heap.size()) restore_heap(i);
}
void print_heap()
{
for(int i=0;i<heap.size();i++)
{
cout<<heap[i]<<" ";
}
cout<<"\n";
}
int main()
{
fin>>n;
for(int i=0;i<n;i++)
{
int k1;
int k2;
fin>>k1;
if(k1 == 1)
{
fin>>k2;
build_heap(k2);
stack_order.push_back(k2);
}
else if(k1 == 2)
{
fin>>k2;
search_and_delete(k2);
print_heap();
}
else if(k1 == 3)
{
//cout<<heap[0]<<"\n";
//print_heap();
}
}
}