Pagini recente » Cod sursa (job #1445809) | Cod sursa (job #50351) | Cod sursa (job #1589537) | Cod sursa (job #1135727) | Cod sursa (job #1028059)
#include <iostream>
#include <fstream>
#include <math.h>
std::ifstream fin("algsort.in");
std::ofstream fout("algsort.out");
long long n, k, lung, vec[500001];
long long minimi[500001];
void citire()
{
fin>>n;
k = sqrt(n);
lung = n - k;
unsigned int maxim = -1;
for(int i = 0; i <= (n-1) / lung; i++)
{
minimi[i] = maxim;
}
for(int i = 0; i < n; i++)
{
fin>>vec[i];
if(minimi[i / lung] > vec[i])
{
minimi[i / lung] = vec[i];
}
}
}
void rezolvare()
{
bool done = false;
unsigned long long myMin = -1;
int poz = 0;
for(int i = 0; i <= (n-1)/lung; i++)
{
if(minimi[i] != -1)
{
if(minimi[i] < myMin)
{
myMin = minimi[i];
done = true;
poz = i;
}
}
}
if(done)
{
//minimi[poz] = -1;
unsigned long long myNewMin = -1;
bool found = false;
for(int i = poz * lung; i < (poz+1) * lung && i < n; i++)
{
if(vec[i] == myMin)
{
vec[i] = -1;
}
if(vec[i] != -1 && vec[i] < myNewMin)
{
found = true;
myNewMin = vec[i];
}
}
if(found)
{
minimi[poz] = myNewMin;
}
else
{
minimi[poz] = -1;
}
fout<<myMin<<' ';
rezolvare();
}
}
int main()
{
citire();
rezolvare();
return 0;
}