#include <bits/stdc++.h>
using
namespace
std;
void
closestPair(vector<vector<
int
> > arr1, vector<vector<
int
> > arr2,
int
target)
{
map<
int
, vector<
int
> > valueToIds;
vector<vector<
int
> > result;
int
closestTarget = 0;
for
(vector<
int
> a : arr1) {
int
val = a[1], id = a[0];
if
(valueToIds.find(val) == valueToIds.end())
valueToIds[val] = vector<
int
>();
valueToIds[val].push_back(id);
}
for
(vector<
int
> b : arr2) {
int
remaining = target - b[1];
if
(remaining < 0)
continue
;
map<
int
, vector<
int
> >::iterator it = valueToIds.lower_bound(remaining);
if
(it == valueToIds.end())
continue
;
int
floor
= it->first;
int
currentTarget = b[1] +
floor
;
if
(currentTarget >= closestTarget) {
if
(currentTarget > closestTarget) {
closestTarget = currentTarget;
result.clear();
}
for
(
int
id : valueToIds[
floor
])
result.push_back({ id, b[0] });
}
}
for
(vector<
int
> ans : result) {
cout << ans[0] <<
" "
<< ans[1] << endl;
}
}
int
main()
{
vector<vector<
int
> > arr1
= { { 1, 2000 }, { 2, 3000 }, { 3, 2000 } };
vector<vector<
int
> > arr2 = { { 1, 3000 },
{ 2, 3000 } };
int
target = 5500;
closestPair(arr1, arr2, target);
return
0;
}