classSolution{public:vector<int>maxNumber(vector<int>&nums1,vector<int>&nums2,intk){vector<int>ans;for(intk1=0;k1<=k;++k1){constintk2=k-k1;if(k1>nums1.size()||k2>nums2.size())continue;ans=max(ans,merge(maxArray(nums1,k1),maxArray(nums2,k2)));}returnans;}private:vector<int>maxArray(constvector<int>&nums,intk){vector<int>res;inttoPop=nums.size()-k;for(constintnum:nums){while(!res.empty()&&res.back()<num&&toPop-->0)res.pop_back();res.push_back(num);}return{res.begin(),res.begin()+k};}// Merges nums1 and nums2.vector<int>merge(constvector<int>&nums1,constvector<int>&nums2){vector<int>res;autos1=nums1.cbegin();autos2=nums2.cbegin();while(s1!=nums1.cend()||s2!=nums2.cend())if(lexicographical_compare(s1,nums1.cend(),s2,nums2.cend()))res.push_back(*s2++);elseres.push_back(*s1++);returnres;}};