Cod sursa(job #3150700)

Utilizator victorzarzuZarzu Victor victorzarzu Data 17 septembrie 2023 23:28:41
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#include <unordered_map>
#include <algorithm>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");
int n;
int heap[500001];

void read() {
  f>>n;
  for(int i = 1;i <= n;++i) {
    f>>heap[i];
  }
}

void update(const int& heap_size, const int& pos) {
  int winner = pos;
  int left_pos = 2 * pos, right_pos = 2 * pos + 1;

  if(left_pos <= heap_size && heap[left_pos] > heap[winner]) {
    winner = left_pos;
  }
  if(right_pos <= heap_size && heap[right_pos] > heap[winner]) {
    winner = right_pos;
  }

  if(winner != pos) {
    swap(heap[winner], heap[pos]);
    update(heap_size, winner);
  }
}

void solve() {
  for(int i = n / 2;i >= 1;--i) {
    update(n, i);
  }

  int heap_size = n;
  for(int i = 1;i <= n;++i) {
    swap(heap[heap_size], heap[1]);
    heap_size--;
    update(heap_size, 1);
  }

  for(int i = 1;i <= n;++i) {
    g<<heap[i]<<" ";
  }
}

int main() {
  read();
  solve();
  return 0;
}