Cod sursa(job #1802609)

Utilizator AhileGigel Frone Ahile Data 10 noiembrie 2016 15:16:17
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.9 kb
#include<bits/stdc++.h>
using namespace std;
#define in f
#define out g

ifstream f ("heapuri.in");
ofstream g ("heapuri.out");

int n;
int code;
int x;
int heap[1000010];
int poz;
int aux;
int j;
int aux1;
vector<int>b;
unordered_map<int, int>order;

int insertheap(int x) {

    poz++;
    heap[poz] = x;
    int i = poz;
    order[x] = poz;
    while(heap[i] <= heap[i / 2] && i > 1) {

        aux1 = order[heap[i]];
        order[heap[i]] = order[heap[i / 2]];
        order[heap[i / 2]] = aux1;

        aux = heap[i];
        heap[i] = heap[i / 2];
        heap[i / 2] = aux;

        i = i / 2;

    }
}


int removeheap(int x) {

    int nr = heap[x];
    heap[nr] = heap[poz];
    heap[poz] = 0;

    poz--;

    while((heap[nr] >= heap[2 * nr] ||  heap[nr] >= heap[2 * nr + 1]) && nr <= poz / 2) {

        if(heap[2 * nr] < heap[2 * nr + 1] || heap[2 * nr + 1] == 0) {

            aux1 = order[heap[2 * nr]];
            order[heap[2 * nr]] = order[heap[nr]];
            order[heap[nr]] = aux1;

            aux = heap[2 * nr];
            heap[2 * nr] = heap[nr];
            heap[nr] = aux;

            nr *= 2;
        } else {
            aux1 = order[heap[2 * nr + 1]];
            order[heap[2 * nr + 1]] = order[heap[nr]];
            order[heap[nr]] = aux1;

            aux = heap[2 * nr + 1];
            heap[2 * nr + 1] = heap[nr];
            heap[nr] = aux;

            nr = 2 * nr + 1;
        }

    }

}

int minheap(int x) {

    out << heap[1];
    out << "\n";
}

int main() {

    in >> n;
    for(int i = 1; i <= n; i++) {
        in >> code;
        if(code == 1) {
            in >> x;
            b.push_back(x);
            insertheap(x);
        }
        if(code == 2) {
            in >> x;
            removeheap(x);
        }
        if(code == 3) {
            minheap(x);
        }
    }

}