fork(1) download
  1. #include<stdio.h>
  2.  
  3. int findKthsmallest(int a[],int m,int b[],int n,int k)
  4. {
  5. int i=0,j=0,ti=0,tj=0,I=0,J=0,M=m,N=n;
  6. while(1)
  7. {
  8. ti = (int)((double)m/(m+n) * (k-1));
  9. tj = (k-1)-ti;
  10. i = I+ti;
  11. j= J+tj;
  12. //printf(" i=%d j=%d\n",i,j);
  13. if(j>0 && j<N && i<M && a[i]>b[j-1] && a[i]<b[j])
  14. return a[i];
  15. if(i>0 && i<M && j<N && b[j]>a[i-1] && b[j]<a[i])
  16. return b[j];
  17. if(j==0 && i<M && a[i]<b[j])
  18. return a[i];
  19. if(i==0 && j<N && b[j]<a[i])
  20. return b[j];
  21. if(j==N && a[i]>b[j-1])
  22. return a[i];
  23. if(i==M && b[j]>a[i-1])
  24. return b[j];
  25. if(i<M && j<N)
  26. {
  27. if(a[i]<b[j])
  28. {
  29. k=k-ti-1;
  30. m=m-ti-1;
  31. I=i+1;
  32. }
  33. else
  34. {
  35. k=k-tj-1;
  36. n=n-tj-1;
  37. J=j+1;
  38. }
  39. }
  40. else if(i>=M)
  41. {
  42. k=k-tj-1;
  43. n=n-tj-1;
  44. J=j+1;
  45. }
  46. else
  47. {
  48. k=k-ti-1;
  49. m=m-ti-1;
  50. I=i+1;
  51. }
  52. }
  53. }
  54.  
  55. int main()
  56. {
  57. int a[]={1,2,3};
  58. int b[]={4};
  59. int m=3,n=1,k=3;
  60. printf("%d",findKthsmallest(a,m,b,n,k));
  61. return 0;
  62. }
  63.  
Success #stdin #stdout 0s 1720KB
stdin
Standard input is empty
stdout
3