Pagini recente » Monitorul de evaluare | Cod sursa (job #2190507) | Cod sursa (job #2103426) | Cod sursa (job #1426281) | Cod sursa (job #1039282)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
#define inf 4294967296
int main()
{
ifstream f("algsort.in");
ofstream g("algsort.out");
long long n,a[500001],b[800],i,j,huh,s,nr,gal,mini,k;
f>>n;
s=(int)sqrt(n);
nr=n/s;
k=1;
for(i=1;i<=nr;++i)
{mini=inf;
for(j=1;j<=s;j++)
{ f>>a[k];
if(a[k]<mini)
mini=a[k];
k++; }
b[i]=mini;}
if(nr*s!=n)
for(i=nr*s+1;i<=n;i++)
{ f>>a[k];
if(a[k]<b[nr])
b[nr]=a[k];
k++; }
mini=inf-1;
while(mini!=inf)
{
for(i=1;i<=nr;i++)
if(b[i]<mini)
{ mini=b[i];
gal=i; }
if(mini!=inf)
{ g<<mini<<" ";
if(gal==nr)
huh=n;
else
huh=gal*s;
b[gal]=inf;
int ok=1;
for(i=(gal-1)*s+1;i<=huh;i++)
{ if(a[i]==mini && ok==1)
{ a[i]=inf; ok=0; }
if(a[i]<b[gal])
b[gal]=a[i]; }
mini=b[gal];
for(i=1;i<=nr;i++)
if(b[i]<mini)
{ mini=b[i];
gal=i; }
}
}
f.close();
g.close();
return 0;
}