Cod sursa(job #2301774)

Utilizator andrei.arnautuAndi Arnautu andrei.arnautu Data 13 decembrie 2018 15:24:38
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
/**
  *  Worg
  */
#include <vector>
#include <fstream>

std::ifstream fin("algsort.in"); std::ofstream fout("algsort.out");

unsigned int MAX_INF = (1U << 31) - 1;

std::vector<std::pair<int, int > > seg_tree;

void Update(int node, int left, int right, int index, int value) {
  if (left == right) {
    seg_tree[node] = {value, left}; return;
  }

  int mid = (left + right) >> 1;
  int left_son = node << 1, right_son = left_son + 1;

  if (index <= mid) {
    Update(left_son, left, mid, index, value);
  } else {
    Update(right_son, mid + 1, right, index, value);
  }

  seg_tree[node] = std::min(seg_tree[left_son], seg_tree[right_son]);
}

int main() {
  int n; fin >> n;
  seg_tree = std::vector<std::pair<int, int > >(5 * n / 2, {MAX_INF, 0});

  for (int i = 1; i <= n; i++) {
    int value; fin >> value;
    Update(1, 1, n, i, value);
  }

  for (int i = 1; i <= n; i++) {
    int j = seg_tree[1].second;
    int a = seg_tree[1].first;

    fout << a << " ";

    Update(1, 1, n, j, MAX_INF);
  }
  printf("\n");
  return 0;
}