Pagini recente » Cod sursa (job #1598476) | Cod sursa (job #1955736) | Cod sursa (job #2635226) | Cod sursa (job #748834) | Cod sursa (job #1275510)
#include <iostream>
#include <fstream>
#define LeftSon (node << 1)
#define RightSon ((node << 1) + 1)
using namespace std;
unsigned int ansmin;
const unsigned int NMax = 500010, INF = 4000000000;
int N;
unsigned int a[NMax];
unsigned int aint[4 * NMax];
void Read()
{
ifstream f ("algsort.in");
f >> N;
for (int i = 1; i <= N; ++ i)
f >> a[i];
f.close();
}
void Build(const int node, const int st, const int dr)
{
if (st == dr)
{
aint[node] = a[st];
return ;
}
int mij = (st+dr) >> 1;
Build(LeftSon, st, mij);
Build(RightSon, mij + 1, dr);
aint[node] = min (aint[LeftSon], aint[RightSon]);
}
void Query(const int node, const int st, const int dr)
{
if (st == dr)
{
ansmin = aint[node];
aint[node] = INF;
return ;
}
int mij = (st+dr) >> 1;
if (aint[LeftSon] == aint[node])
Query(LeftSon, st, mij);
else
Query(RightSon, mij + 1, dr);
aint[node] = min(aint[LeftSon], aint[RightSon]);
}
int main()
{
Read();
Build(1, 1, N);
for (int i = 1; i <= N; ++ i)
{
ansmin = INF;
Query(1, 1, N);
a[i] = ansmin;
}
ofstream g ("algsort.out");
for (int i = 1; i <= N; ++ i)
g << a[i] << " ";
g << "\n";
g.close();
return 0;
}