Pagini recente » Cod sursa (job #2511616) | Cod sursa (job #2725138) | Cod sursa (job #1977225) | Cod sursa (job #1494486) | Cod sursa (job #2312598)
#include <iostream>
#include <fstream>
#include <climits>
#define f for(i = 1; i <= n ; i++)
#define primul_el out << v[AI[1]] <<" ";
using namespace std;
const int N = 10000001;
int AI[N], *v, n;
void Create (int x, int st, int dr)
{
if(st == dr)
{
AI[x] = st;
return;
}
int m = ( st + dr ) / 2;
Create(2 * x, st, m);
Create(2 * x + 1, m + 1, dr);
if(v[AI[2 * x]] > v[AI[2 * x + 1]])
AI[x] = AI[2 * x + 1];
else
AI[x] = AI[2 * x ];
}
void Update ( int st, int dr, int x, int poz )
{
unsigned int m = (st + dr) / 2;
if(st == dr)
{
AI[x] = poz;
return;
}
if(poz <= m)
Update( st, m, 2 * x, poz);
else
Update( m + 1, dr, 2 * x + 1, poz);
if(v[AI[2 * x]] < v[AI[2 * x + 1]])
AI[x] = AI[2 * x];
else
AI[x] = AI[2 * x + 1];
}
int main()
{
int i;
ifstream in ("algsort.in");
ofstream out ("algsort.out");
in >> n;
v = new int[n + 1];
f in >> v[i];
Create ( 1, 1, n );
f {
primul_el
v[AI[1]] = INT_MAX;
Update(1, n, 1, AI[1]);
}
delete (v);
in.close();
out.close();
return 0;
}