Pagini recente » Cod sursa (job #1848455) | Cod sursa (job #2693698) | Cod sursa (job #1761117) | Cod sursa (job #2465360) | Cod sursa (job #1028072)
#include <iostream>
#include <cstdio>
#include <cmath>
long V[50000],A[50000],B[50000];
FILE *f,*g;
using namespace std;
int main(){
f=fopen("date.in","r");
g=fopen("date.out","w");
long n,k,p=1,kk=0,min=32000,pp=0,i,j,l;
fscanf(f,"%ld",&n);
k=sqrt(n);
for(i=0;i<n;i++)
{
fscanf(f,"%ld",&V[i]);
if( i%k == 0 )
A[i/k] = V[i];
A[i/k] = min( A[i/k], V[i]);
minim = min( minim, V[i]);
}
kk = n / k + !!(n%k);
A[kk]=minim;
for(j=1;j<=n;j++)
{
minim=A[1];
for(i=1;i<=kk;i++)
{
if(A[i]<=minim)
{
minim=A[i];
p=i;
}
}
pp++;
B[pp]=minim;
long md,min2=(1<<30),mt;
int sem=0;
md=(k*(p-1))+1;
mt=md+k-1;
if(mt>n)
mt=n;
for(l=md;l<=mt;l++)
if(V[l]==minim)
{
V[l] == ( 1<< 30);
break;
}
minim = V[md];
for( l = md; l <= mt; ++l)
if(V[l] < minim)
minim = V[l];
A[p]=minim;
}
for(int j=1;j<=n;j++)
{
fprintf(g,"%ld ",B[j]);
}
fclose(f);
fclose(g);
return 0;
}