Pagini recente » Cod sursa (job #48993) | Cod sursa (job #993153) | Cod sursa (job #3260958) | Cod sursa (job #1934770) | Cod sursa (job #2301724)
/**
* Worg
*/
#include <vector>
#include <fstream>
std::ifstream fin("algsort.in"); std::ofstream fout("algsort.out");
unsigned int MAX_INF = (1U << 31) - 1;
void Update(std::vector<std::pair<int, int > > &seg_tree, 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(seg_tree, left_son, left, mid, index, value);
} else {
Update(seg_tree, 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;
std::vector<std::pair<int, int > > seg_tree(n + 1, {MAX_INF, 0});
for (int i = 1; i <= n; i++) {
int value; fin >> value;
Update(seg_tree, 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(seg_tree, 1, 1, n, j, MAX_INF);
}
printf("\n");
return 0;
}