Pagini recente » Cod sursa (job #2775736) | Cod sursa (job #2362806) | Cod sursa (job #879558) | Cod sursa (job #2072180) | Cod sursa (job #1028101)
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
long V[500001],A[500001],B[500001];
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,minim=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]);
}
kk = n / k + !!(n%k);
for(j=0;j<n;j++)
{
minim=A[1];
for(i=0;i<kk;i++)
{
if(A[i]<=minim)
{
minim=A[i];
p=i;
}
}
B[pp]=minim;
pp++;
long md,min2=(1<<30),mt;
int sem=0;
md=(k*p);
mt=md+k-1;
if(mt>=n)
mt=n-1;
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=0;j<n;j++)
{
fprintf(g,"%ld ",B[j]);
}
fclose(f);
fclose(g);
return 0;
}