Pagini recente » Cod sursa (job #685624) | Cod sursa (job #2446824) | Cod sursa (job #471766) | Cod sursa (job #1127548) | Cod sursa (job #1825888)
#include <fstream>
#include <algorithm>
#include <stdint.h>
int32_t n, temp, place;
int32_t tree[2000004];
void modify(int32_t node, int32_t left, int32_t right, int32_t position, int32_t value)
{
if (left==right)
{
tree[node] = value;
return;
}
int32_t middle = (left+right)>>1;
if (position <= middle)
modify(node<<1, left, middle, position, value);
else
modify(node<<1|1, middle+1, right, position, value);
tree[node] = std::min(tree[node<<1], tree[node<<1|1]);
}
int32_t query(int32_t node, int32_t left, int32_t right, int32_t value)
{
if (left==right) return left;
int32_t middle = (left+right)>>1;
if (value == tree[node<<1])
return query(node<<1, left, middle, value);
else
return query(node<<1|1, middle+1, right, value);
}
int main()
{
std::ifstream fin("algsort.in");
std::ofstream fout("algsort.out");
fin>>n;
for (int32_t i = 1; i <= n; ++i)
{
fin>>temp;
modify(1, 1, n, i, temp);
}
for (int32_t i = 1; i <= n; ++i)
{
fout<<tree[1]<<" ";
place = query(1, 1, n, tree[1]);
modify(1, 1, n, place, (int32_t)(1)<<31-1);
}
fin.close();
fout.close();
return 0;
}