fork download
  1. #include <stdio.h>
  2. void merge(unsigned long long int arr[], int l, int m, int r)
  3. {
  4. int i, j, k;
  5. int n1 = m - l + 1;
  6. int n2 = r - m;
  7.  
  8. /* create temp arrays */
  9. int L[n1], R[n2];
  10.  
  11. /* Copy data to temp arrays L[] and R[] */
  12. for (i = 0; i < n1; i++)
  13. L[i] = arr[l + i];
  14. for (j = 0; j < n2; j++)
  15. R[j] = arr[m + 1+ j];
  16.  
  17. /* Merge the temp arrays back into arr[l..r]*/
  18. i = 0; // Initial index of first subarray
  19. j = 0; // Initial index of second subarray
  20. k = l; // Initial index of merged subarray
  21. while (i < n1 && j < n2)
  22. {
  23. if (L[i] <= R[j])
  24. {
  25. arr[k] = L[i];
  26. i++;
  27. }
  28. else
  29. {
  30. arr[k] = R[j];
  31. j++;
  32. }
  33. k++;
  34. }
  35.  
  36. /* Copy the remaining elements of L[], if there
  37.   are any */
  38. while (i < n1)
  39. {
  40. arr[k] = L[i];
  41. i++;
  42. k++;
  43. }
  44.  
  45. /* Copy the remaining elements of R[], if there
  46.   are any */
  47. while (j < n2)
  48. {
  49. arr[k] = R[j];
  50. j++;
  51. k++;
  52. }
  53. }
  54.  
  55. /* l is for left index and r is right index of the
  56.   sub-array of arr to be sorted */
  57. void mergeSort(unsigned long long int arr[], int l, int r)
  58. {
  59. if (l < r)
  60. {
  61. // Same as (l+r)/2, but avoids overflow for
  62. // large l and h
  63. int m = l+(r-l)/2;
  64.  
  65. // Sort first and second halves
  66. mergeSort(arr, l, m);
  67. mergeSort(arr, m+1, r);
  68.  
  69. merge(arr, l, m, r);
  70. }
  71. }
  72. int main(void) {
  73.  
  74. long int t,n,i,j,temp,r;
  75. static unsigned long long int g[100000],o[100000];
  76.  
  77.  
  78. scanf("%li",&t);
  79. while(t--)
  80. {
  81. r=0;
  82. scanf("%li",&n);
  83. for(i=0;i<n;i++)
  84. {
  85. scanf("%lli",&g[i]);
  86. }
  87. for(i=0;i<n;i++)
  88. {
  89. scanf("%lli",&o[i]);
  90. }
  91. for(i=0;i<n;i++)
  92. {
  93. for(j=0;j<n-1;j++)
  94. {
  95. if(g[j]>g[j+1])
  96. {
  97. temp=g[j];
  98. g[j]=g[j+1];
  99. g[j+1]=temp;
  100. }
  101. }
  102. }
  103. mergeSort(o, 0, n-1);
  104. /* for(i=0;i<n;i++)
  105. {
  106. for(j=0;j<n-1;j++)
  107. {
  108. if(o[j]>o[j+1])
  109. {
  110. temp=o[j];
  111. o[j]=o[j+1];
  112. o[j+1]=temp;
  113. }
  114. }
  115. }*/
  116.  
  117. for(i=0,j=0;i<n;)
  118. {
  119. if(o[j]<g[i])
  120. {
  121. r++;
  122. i++;
  123. j++;
  124. }
  125. else
  126. {
  127. i++;
  128. }
  129. }
  130. for(i=0;i<n;i++)
  131. printf(" %lli",g[i]);
  132. printf("\n");
  133. for(i=0;i<n;i++)
  134. printf(" %lli",o[i]);
  135. printf("\n");
  136. printf("%li\n",r);
  137. }
  138. return 0;
  139. }
  140.  
Success #stdin #stdout 0s 4368KB
stdin
1
10
3 6 7 5 3 5 6 2 9 1 
2 7 0 9 3 6 0 6 2 6 
stdout
 1 2 3 3 5 5 6 6 7 9
 0 0 2 2 3 6 6 6 7 9
7