#include <queue>
#include <iostream>
#include <functional>
#include <vector>
using namespace std;
vector<pair<int, int>> kSmallestPairs(const vector<int>& nums1, const vector<int>& nums2, int k) {
vector<pair<int, int>> ans;
int m = nums1.size();
if(m == 0) return ans;
int n = nums2.size();
if(n == 0) return ans;
priority_queue<pair<int, int>, vector<pair<int, int>>, function<bool(const pair<int,int>&, const pair<int,int>&)>> pq([&](const pair<int,int>&a, const pair<int,int>&b){
return nums1[a.first] + nums2[a.second] > nums1[b.first] + nums2[b.second];
});
pq.push({0, 0});
while(!pq.empty() && k-- > 0) {
auto top = pq.top();
pq.pop();
int index1 = top.first, index2 = top.second;
ans.push_back({nums1[index1], nums2[index2]});
if(index1 + 1 < m) pq.push({index1 + 1, index2});
if(index2 + 1 < n) pq.push({index1, index2 + 1});
}
return ans;
}
int main()
{
for (const auto& p : kSmallestPairs({1,7,11}, {2,4,6}, 3)) {
std::cout << p.first << ", " << p.second << std::endl;
}
}
I2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZlY3RvcjxwYWlyPGludCwgaW50Pj4ga1NtYWxsZXN0UGFpcnMoY29uc3QgdmVjdG9yPGludD4mIG51bXMxLCBjb25zdCB2ZWN0b3I8aW50PiYgbnVtczIsIGludCBrKSB7CiAgICB2ZWN0b3I8cGFpcjxpbnQsIGludD4+IGFuczsKICAgIGludCBtID0gbnVtczEuc2l6ZSgpOwogICAgaWYobSA9PSAwKSByZXR1cm4gYW5zOwogICAgaW50IG4gPSBudW1zMi5zaXplKCk7CiAgICBpZihuID09IDApIHJldHVybiBhbnM7CiAgICBwcmlvcml0eV9xdWV1ZTxwYWlyPGludCwgaW50PiwgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiwgZnVuY3Rpb248Ym9vbChjb25zdCBwYWlyPGludCxpbnQ+JiwgY29uc3QgcGFpcjxpbnQsaW50PiYpPj4gcHEoWyZdKGNvbnN0IHBhaXI8aW50LGludD4mYSwgY29uc3QgcGFpcjxpbnQsaW50PiZiKXsKICAgICAgICByZXR1cm4gbnVtczFbYS5maXJzdF0gKyBudW1zMlthLnNlY29uZF0gPiBudW1zMVtiLmZpcnN0XSArIG51bXMyW2Iuc2Vjb25kXTsKICAgIH0pOwogICAgcHEucHVzaCh7MCwgMH0pOwoKICAgIHdoaWxlKCFwcS5lbXB0eSgpICYmIGstLSA+IDApIHsKICAgICAgICBhdXRvIHRvcCA9IHBxLnRvcCgpOwogICAgICAgIHBxLnBvcCgpOwogICAgICAgIGludCBpbmRleDEgPSB0b3AuZmlyc3QsIGluZGV4MiA9IHRvcC5zZWNvbmQ7CiAgICAgICAgYW5zLnB1c2hfYmFjayh7bnVtczFbaW5kZXgxXSwgbnVtczJbaW5kZXgyXX0pOwogICAgICAgIGlmKGluZGV4MSArIDEgPCBtKSBwcS5wdXNoKHtpbmRleDEgKyAxLCBpbmRleDJ9KTsKICAgICAgICBpZihpbmRleDIgKyAxIDwgbikgcHEucHVzaCh7aW5kZXgxLCBpbmRleDIgKyAxfSk7CiAgICB9CiAgICByZXR1cm4gYW5zOwp9CgppbnQgbWFpbigpCnsKICAgIGZvciAoY29uc3QgYXV0byYgcCA6IGtTbWFsbGVzdFBhaXJzKHsxLDcsMTF9LCB7Miw0LDZ9LCAzKSkgewogICAgICAgIHN0ZDo6Y291dCA8PCBwLmZpcnN0IDw8ICIsICIgPDwgcC5zZWNvbmQgPDwgc3RkOjplbmRsOyAgICAgICAgCiAgICB9Cn0=