Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. double median(std::vector<int> V1, std::vector<int> V2)
  2. {
  3. if (V1.size() > V2.size())
  4. {
  5. V1.swap(V2);
  6. };
  7. int s1 = V1.size();
  8. int s2 = V2.size();
  9. int low = 0;
  10. int high = s1;
  11. while (low <= high)
  12. {
  13. int px = (low + high) / 2;
  14. int py = (s1 + s2 + 1) / 2 - px;
  15.  
  16. int maxLeftX = (px == 0) ? MIN : V1[px - 1];
  17. int minRightX = (px == s1) ? MAX : V1[px];
  18.  
  19. int maxLeftY = (py == 0) ? MIN : V2[py - 1];
  20. int minRightY = (py == s2) ? MAX : V2[py];
  21.  
  22. if (maxLeftX <= minRightY && maxLeftY <= minRightX)
  23. {
  24. if ((s1 + s2) % 2 == 0)
  25. {
  26. return (double(std::max(maxLeftX, maxLeftY)) + double(std::min(minRightX, minRightY)))/2;
  27. }
  28. else
  29. {
  30. return std::max(maxLeftX, maxLeftY);
  31. }
  32. }
  33. else if(maxLeftX > minRightY)
  34. {
  35. high = px - 1;
  36. }
  37. else
  38. {
  39. low = px + 1;
  40. }
  41. }
  42. throw;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement