Pagini recente » Diferente pentru home intre reviziile 902 si 530 | Diferente pentru numerele-sprague-grundy intre reviziile 35 si 38 | Cod sursa (job #1852912) | Cod sursa (job #1321540) | Cod sursa (job #1283090)
//Deresu Roberto - FMI
//Re :)
#include<fstream>
#include<algorithm>
#include<climits>
#define sz 707
#define nx 500007
using namespace std;
int n,m,poz,k,a[nx],c[nx];
struct asd
{
int val, poz;
}b[sz+7];
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int cauta_minim()
{
int m, poz;
m = INT_MAX;
poz = 0;
for(int i=1;i<=k;i++)
if(b[i].val < m)
{
m = b[i].val;
poz = i;
}
return poz;
}
void actualizeaza_minim(int poz)
{
int l,r;
b[poz].val = INT_MAX;
l = (poz-1)*sz+1;
r = min(poz*sz,n);
for(int i=l;i<=r;i++)
if(a[i] < b[poz].val)
{
b[poz].val = a[i];
b[poz].poz = i;
}
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>a[i];
if(i > k*sz)
{
b[k].val = m;
b[k].poz = poz;
++k;
m = INT_MAX;
}
if(a[i] < m)
{
m = a[i];
poz = i;
}
}
b[k].val = m;
b[k].poz = poz;
for(int i=1;i<=n;i++)
{
int poz = cauta_minim();
c[i] = b[poz].val;
a[b[poz].poz] = INT_MAX;
actualizeaza_minim(poz);
}
for(int i=1;i<=n;i++)
fout<<c[i]<<" ";
return 0;
}