fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define task "orderfrac"
  4. int n;
  5. double eps = 1e-12;
  6. long long a[100002] = {}, b[100002] = {};
  7. bool check(double mid, long long x)
  8. {
  9. unsigned long long res = 0;
  10. long long bs = lower_bound(a, a + n, ceil(double(b[n - 1]) * mid)) - a;
  11. res += bs;
  12. for (int i = n - 2; i >= 0; i--)
  13. {
  14. while (a[bs] < (b[i] * 1.0 * mid) && bs < n)
  15. bs++;
  16. res += bs;
  17. }
  18. return (res < x);
  19. }
  20. void solve(long long x)
  21. {
  22. double l = 0.0, r = 1e7, mid;
  23. for (int i = 0; i < 500 && l + eps < r; ++i)
  24. {
  25. mid = 0.5 * (l + r);
  26. if (check(mid, x))
  27. l = mid;
  28. else
  29. r = mid;
  30. }
  31. // cout<<r<<" "<<x<<'\n';
  32. double div = 1e8, ans1 = 0.0, ans2 = 0.0;
  33. for (int i = 0; i < n; i++)
  34. {
  35. int t = lower_bound(a, a + n, ceil(l * double(b[i]))) - a;
  36. if (a[t] != 0 && b[i] != 0 && (double(a[t])) < div * double(b[i]))
  37. {
  38. div = double(a[t]) / double(b[i]);
  39. ans1 = a[t];
  40. ans2 = b[i];
  41. }
  42. }
  43. // cout<<ans1<<" "<<ans2<<'\n';
  44. long long t1 = ans1, t2 = ans2, gg = __gcd(t1, t2);
  45. t1 /= gg;
  46. t2 /= gg;
  47. cout << t1 << " " << t2 << '\n';
  48. }
  49. int main()
  50. {
  51. if (fopen(task ".inp", "r"))
  52. {
  53. freopen(task ".inp", "r", stdin);
  54. freopen(task ".out", "w", stdout);
  55. }
  56. ios_base::sync_with_stdio(false);
  57. cin.tie(0);
  58. cout.tie(0);
  59. int q;
  60. cin >> n >> q;
  61. for (int i = 0; i < n; i++)
  62. cin >> a[i];
  63. sort(a, a + n, less<long long>());
  64. for (int i = 0; i < n; i++)
  65. cin >> b[i];
  66. sort(b, b + n, greater<long long>());
  67. while (q--)
  68. {
  69. long long x;
  70. cin >> x;
  71. solve(x);
  72. }
  73. }
Runtime error #stdin #stdout 0.02s 5332KB
stdin
Standard input is empty
stdout
Standard output is empty