3
bool check(long long midval, vector<int> &nums1, vector<int> &nums2, long long k) {5
for (int i = 0; i < nums1.size(); i++) {6
long long val = nums1[i];8
// If val == 0, product of val and each element in nums2 will be 0. And if9
// midval>=0, then because all products are 0, all products will be10
// smaller or equal to midval. So we can add all products in the answer11
if (val == 0 and midval >= 0)15
cnt += findmaxIndex(nums2, val, midval);18
cnt += findminIndex(nums2, val, midval);23
int findmaxIndex(vector<int> &nums2, long long val, long long midval) {24
int l = 0, r = nums2.size() - 1, res = -1;26
long long mid = (l + r) / 2;27
if (val * nums2[mid] <= midval) {36
int findminIndex(vector<int> &nums2, long long val, long long midval) {37
int l = 0, r = nums2.size() - 1, res = r + 1;39
long long mid = (l + r) / 2;40
if (val * nums2[mid] <= midval) {46
return nums2.size() - res;49
long long kthSmallestProduct(vector<int> &nums1, vector<int> &nums2, long long k) {50
long long l = -1e10, r = 1e10, res = -1;52
long long mid = (l + r) / 2;54
if (check(mid, nums1, nums2, k)) {