Cod sursa(job #2613732)

Utilizator michael_blazemihai mihai michael_blaze Data 10 mai 2020 16:12:11
Problema Heapuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#define MAX 200005
using namespace std;

int minHeap[MAX], n = -1;


// operatia 3
int getRoot() {
	return minHeap[0];
}

void upHeap(int x) {
	int father = x / 2;

	if (minHeap[father] > minHeap[x]) {
		swap(minHeap[father], minHeap[x]);
		upHeap(father);
	}
}

void downHeap(int x) {
	int son1 = 2 * x + 1;
	int son2 = 2 * x + 2;
	int son;

	if (son1 > n)
		return;

	if (son2 <= n and minHeap[son1] > minHeap[son2]) 
		son = son2;
	else 
		son = son1;


	if (minHeap[son] < minHeap[n]) {
		swap(minHeap[x], minHeap[son]);
		downHeap(son);
	}

}

// operatia 1
int Insert(int x) {
	minHeap[++ n] = x;
	upHeap(n);
}

int Delete(int x) {
	swap(minHeap[x], minHeap[n]);
	n --;
	downHeap(x);
}



int main() {
	freopen("heapuri.in", "r", stdin);
	freopen("heapuri.out", "w", stdout);

	int t;
	int operation, value;

	while (t --) {
		cin >> operation;
		switch(operation) {
			case 1: 
				cin >> value;
				Insert(value);
				break;
			case 2:
				cin >> value;
				Delete(value - 1);
				break;
			case 3:
				cout << getRoot() << '\n';
				break;
		}
	}

	// cout << n << '\n';

	cout << getRoot();

	return 0;
}