1. vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
    2. if(nums1.empty() || nums2.empty())return {};
    3. int len = nums2.size();
    4. unordered_map<int, int> m;
    5. stack<int> s;
    6. for(int i = len - 1;i >= 0;--i){
    7. while(!s.empty() && nums2[i] >= s.top())s.pop();
    8. if(s.empty())m[nums2[i]] = -1;
    9. else m[nums2[i]] = s.top();
    10. s.push(nums2[i]);
    11. }
    12. int n = nums1.size();
    13. vector<int> ans(n, 0);
    14. for(int i = 0;i < n;++i){
    15. ans[i] = m[nums1[i]];
    16. }
    17. return ans;
    18. }