Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- struct element {
- int key;
- int numer;
- };
- element *tab;
- int heap_size = 0;
- int numer_zad = 0;
- void heapify(int i) {
- int l = 2 * i;
- int r = 2 * i + 1;
- int largest;
- if ((l <= heap_size) && ((tab[l].key > tab[i].key) || (tab[l].key == tab[i].key && tab[l].numer<tab[i].numer)))
- largest = l;
- else
- largest = i;
- if ((r <= heap_size) && ((tab[r].key > tab[largest].key) || (tab[r].key == tab[largest].key && tab[r].numer < tab[largest].numer)))
- largest = r;
- if (largest != i)
- {
- element temp;
- temp = tab[i];
- tab[i] = tab[largest];
- tab[largest] = temp;
- heapify(largest);
- }
- }
- int heap_extract() {
- int max = tab[1].numer;
- tab[1] = tab[heap_size];
- heap_size--;
- int i = 1;
- heapify(i);
- return max;
- }
- void heap_insert(int liczba){
- heap_size++;
- numer_zad++;
- tab[heap_size].key = liczba;
- tab[heap_size].numer = numer_zad;
- int w = heap_size;
- while (w!=1 && (tab[w].key > tab[w/2].key || (tab[w/2].key == tab[w].key && tab[w].numer < tab[w/2].numer)))
- {
- element temp;
- temp = tab[w];
- tab[w] = tab[w/2];
- tab[w/2] = temp;
- w = w / 2;
- }
- }
- int main(){
- int ile;
- cin >> ile;
- tab = new element[ile + 1];
- int liczba;
- for (int i = 0; i < ile; i++){
- cin >> liczba;
- if(liczba != 0)
- heap_insert(liczba);
- if(liczba==0 && heap_size!=0)
- cout << heap_extract() << endl;
- }
- delete[]tab;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement