Pagini recente » Cod sursa (job #2900883) | Cod sursa (job #1447449) | Cod sursa (job #2554190) | Cod sursa (job #1374592) | Cod sursa (job #1028118)
#include <iostream>
#include <fstream>
#include <math.h>
std::ifstream fin("algsort.in");
std::ofstream fout("algsort.out");
int n, k, lung, vec[500001];
int minimi[100001];
void citire()
{
fin>>n;
lung = sqrt( n );
k = n / lung;
if(n % lung)
{
k++;
}
unsigned int maxim = 2147483647;
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()
{
int u = 0;
int poz = 0;
int myMin = 2147483647;
int myNewMin = 2147483647;
bool found = false, changed = false;
while(u<n)
{
myMin = 2147483647;
poz = 0;
for(int i = 0; i <= (n-1)/lung; i++)
{
if(minimi[i] != -1)
{
if(minimi[i] < myMin)
{
myMin = minimi[i];
poz = i;
}
}
}
myNewMin = 2147483647;
found = false, changed = false;
for(int i = poz * lung; i < (poz+1) * lung && i < n; i++)
{
if(vec[i] != -1)
{
if(!changed && vec[i] == myMin)
{
vec[i] = -1;
changed = true;
continue;
}
if(vec[i] < myNewMin)
{
found = true;
myNewMin = vec[i];
}
}
}
if(found)
{
minimi[poz] = myNewMin;
}
else
{
minimi[poz] = -1;
}
fout<<myMin<<' ';
u++;
}
fout<<'\n';
}
int main()
{
citire();
rezolvare();
return 0;
}