Cod sursa(job #2931148)

Utilizator victorzarzuZarzu Victor victorzarzu Data 30 octombrie 2022 16:39:50
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

#define N 500005
#define get_byte(x) ((x >> (8 * byte)) & 255)

using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n;
int hp[N];

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

void swap(int i, int j) {
  hp[i] ^= hp[j];
  hp[j] = hp[i] ^ hp[j];
  hp[i] ^= hp[j];
}

void update(int heap_size, int position) {
  int left = 2 * position;
  int right = 2 * position + 1;
  int winner = position;
  
  if(left <= heap_size && hp[left] > hp[winner]) {
    winner = left;
  }
  if(right <= heap_size && hp[right] > hp[winner]) {
    winner = right;
  }

  if(position != winner) {
    swap(position, winner);
    update(heap_size, winner);
  }
}


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

void solve() {
  createHeap();
  int heap_size = n;
  for(int i = 1;i < n;++i) {
    swap(1, heap_size);
    --heap_size;
    update(heap_size, 1);
  }
  for(int i = 1;i <= n;++i) {
    g<<hp[i]<<" ";
  }
}

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