Pagini recente » Cod sursa (job #2589220) | Cod sursa (job #1552522) | Cod sursa (job #909254) | Cod sursa (job #2136081) | Cod sursa (job #2301774)
/**
* 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;
}