fork download
  1. #include<stdio.h>
  2. inline void fastread(int*);
  3. int main(){
  4. int i,j,l1,l2,u1,u2,n,size = 1;
  5. int *a;
  6. scanf("%d",&n);
  7. a = (int*)malloc(sizeof(int)*n);
  8. int *aux;
  9. aux = (int*)malloc(sizeof(int)*n);
  10. for(i=0;i<n;i++){
  11. fastread(&a[i]);
  12. }
  13. while(size<n){
  14. l1=0;//lowe limit of 1st array
  15. register int k=0;
  16. while(l1+size<n){
  17. l2 = l1+size;//lower limit of second array
  18. u1 = l2-1;//upper limit of first array
  19. u2 = (l2+size-1<n)?l2+size-1:n-1;//upper limit of second array
  20. for(i=l1,j=l2;i<=u1&&j<=u2;k++){
  21. if(a[i]<=a[j])
  22. aux[k]=a[i++];
  23. else
  24. aux[k]=a[j++];
  25. }
  26. for(;i<=u1;k++)
  27. aux[k]=a[i++];
  28. for(;j<=u2;k++)
  29. aux[k]=a[j++];
  30. l1 = u2+1;
  31. }
  32. for(i=l1;k<n;i++)
  33. aux[k++] = a[i];
  34. for(i=0;i<n;i++)
  35. a[i] = aux[i];
  36. size = size*2;
  37. }
  38. for(i=0;i<n;i++)
  39. printf("%d\n",a[i]);
  40. return 0;
  41. }
  42. inline void fastread(int*a)
  43. {
  44. register char c=0;
  45. while (c<33) c=getchar();
  46. *a =0;
  47. while(c>33)
  48. {
  49. *a = *a*10+c-'0';
  50. c=getchar();
  51. }
  52. }
  53.  
Success #stdin #stdout 0s 3272KB
stdin
Standard input is empty
stdout
Standard output is empty