Pagini recente » Cod sursa (job #3040389) | Cod sursa (job #2338667) | Cod sursa (job #3252736) | Cod sursa (job #806930) | Cod sursa (job #1590795)
#include <fstream>
#define INF 1000005
using namespace std;
ifstream cin ("heapuri.in");
ofstream cout ("heapuri.out");
int heap[200005], heap_size, order[200005], op, op_nr, order_size;
void insert_node(int node_val) {
int pos_val, curr_pos;
++heap_size;
heap[heap_size] = node_val;
pos_val = heap_size;
curr_pos = heap_size;
while(curr_pos >= 1) {
if(heap[pos_val] <= heap[curr_pos]) {
swap(heap[pos_val], heap[curr_pos]);
}
pos_val = curr_pos;
curr_pos /= 2;
}
}
void remove_node(int node_val) {
int pos, curr_pos;
for(int i = 1; i <= heap_size; ++i) {
if(heap[i] == node_val) {
heap[i] = INF;
pos = i;
break;
}
}
curr_pos = pos + 1;
while(curr_pos <= heap_size + 1) {
if(heap[pos] > heap[curr_pos] ) {
if(heap[curr_pos] > heap[curr_pos + 1] and curr_pos < heap_size) {
if(heap[pos] > heap[curr_pos + 1]) {
++curr_pos;
}
}
swap(heap[pos], heap[curr_pos]);
pos = curr_pos;
}
curr_pos *= 2;
}
--heap_size;
}
void read() {
cin >> op_nr;
for(int i = 1; i <= op_nr; ++i) {
cin >> op;
if(op == 1) {
int node_val;
cin >> node_val;
insert_node(node_val);
++order_size;
order[order_size] = node_val;
}
if(op == 2) {
int node_order;
cin >> node_order;
remove_node(order[node_order]);
}
if(op == 3) {
cout << heap[1] << '\n';
}
}
}
int main() {
read();
return 0;
}