Pagini recente » Profil brandu | Cod sursa (job #1314776)
#include <fstream>
#include <math.h>
using namespace std;
ifstream fin ("batog.in");
ofstream fout ("batog.out");
int a[100005], n, nrSir, m, v[100005], b[100005], k=0;
int minim(int sir)
{
int minSir = a[sir*m+1];
int poz = sir*m+1;
for (int j=sir*m+2; j<=(sir+1)*m && j<=n; j++)
if (minSir>a[j])
{
minSir=a[j];
poz = j;
}
a[poz]=INFINITY;
return minSir;
}
void minim2()
{
int p=0, i;
int minSir=b[0];
for (i=1; i<nrSir; i++)
if (minSir>b[i])
{
minSir=b[i];
p=i;
}
v[k++]=minSir;
b[p]=minim(p);
}
int main()
{
int i;
fin >> n;
for (i=1; i<=n; i++)
fin >> a[i];
m=sqrt(n);
nrSir=m;
while(nrSir*m<n)
nrSir++;
for (i=0; i<nrSir; i++)
b[i] = minim(i);
for (i=1; i<=n; i++)
minim2();
for (i=0; i<n; i++)
fout << v[i] <<' ';
fin.close();
fout.close();
return 0;
}