Pagini recente » Cod sursa (job #2207367) | Cod sursa (job #340919) | Cod sursa (job #1790330) | Cod sursa (job #1271509) | Cod sursa (job #1074028)
#include <fstream>
using namespace std;
#define DEBUG false
#if DEBUG
#include <iostream>
#define MAXN 10
#define INFILE "/Users/biordach/Documents/Xcode Projects/training/training/heapuri.in"
#define __OUT cout
#else
#define MAXN 200001
#define INFILE "heapuri.in"
#define OUTFILE "heapuri.out"
ofstream __OUT(OUTFILE);
#endif
void readInput();
void solve();
void printOutput();
int pos[MAXN];
struct node
{
int pos;
int value;
}heap[MAXN];
int pos_index = 0;
int heap_index = 1;
int main(int argc, const char * argv[])
{
readInput();
// solve();
// printOutput();
#if DEBUG == false
__OUT.close();
#endif
return 0;
}
void addToHeap(int x){
pos[pos_index] = heap_index;
heap[heap_index].pos = pos_index;
heap[heap_index].value = x;
int x_index = heap_index;
pos_index ++;
heap_index ++;
while (x_index/2 > 0 && heap[x_index/2].value > x){
node aux = heap[x_index/2];
heap[x_index/2] = heap[x_index];
pos[heap[x_index].pos] = x_index/2;
heap[x_index] = aux;
pos[heap[x_index].pos] = x_index;
x_index /= 2;
}
}
void printMin(){
__OUT<<heap[1].value<<'\n';
}
void remove(int index){
int x_index = pos[index-1];
heap_index --;
heap[x_index] = heap[heap_index];
pos[heap[x_index].pos] = x_index;
int x = heap[x_index].value;
while((x_index * 2 < heap_index && heap[x_index*2].value < x) || (x_index * 2 +1< heap_index && heap[x_index*2+1].value < x)){
int min_index = x_index * 2;
if(x_index * 2 +1 < heap_index){
min_index = heap[x_index * 2].value < heap[x_index*2+1].value ? x_index * 2 : x_index * 2 +1;
}
node aux = heap[min_index];
heap[min_index] = heap[x_index];
pos[heap[min_index].pos] = min_index;
heap[x_index] = aux;
pos[heap[x_index].pos] = x_index;
x_index = min_index;
}
}
void readInput(){
ifstream in(INFILE);
int n;
in>>n;
int op, x;
for(int i=0;i<n;i++){
in >> op;
if(op == 1){
in >> x;
addToHeap(x);
} else if(op == 2){
in >> x;
remove(x);
} else printMin();
}
in.close();
}
void solve(){
}
void printOutput(){
}