3
vector<int> maxArray(vector<int> &nums, int k) {6
for (int i = 0; i < n; i++) {8
while (not seen.empty() and seen.top() < nums[i] and right + seen.size() >= k) seen.pop();9
if (seen.size() < k) seen.push(nums[i]);11
vector<int> res(k, 0);12
for (int i = res.size() - 1; i >= 0; i--) {18
bool greater(vector<int> &arr1, int i, vector<int> &arr2, int j) {19
for (; i < arr1.size() and j < arr2.size(); i++, j++) {20
if (arr1[i] == arr2[j]) continue;21
return arr1[i] > arr2[j];23
return i != arr1.size();25
vector<int> merge(vector<int> &arr1, vector<int> &arr2) {26
vector<int> res(arr1.size() + arr2.size());27
for (int ind = 0, i = 0, j = 0; ind < res.size(); ind++) {28
if (greater(arr1, i, arr2, j)) {38
vector<int> maxNumber(vector<int> &nums1, vector<int> &nums2, int k) {39
int m = nums1.size(), n = nums2.size();41
for (int len1 = max(0, k - n); len1 <= min(m, k); len1++) {43
vector<int> arr1 = maxArray(nums1, len1);44
vector<int> arr2 = maxArray(nums2, len2);45
vector<int> temp_res = merge(arr1, arr2);46
if (greater(temp_res, 0, ans, 0)) {47
ans.resize(temp_res.size());48
for (int i = 0; i < temp_res.size(); i++) {