class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
stack<int> q;
int n = nums2.size();
vector<int> res(1e4 + 5), ans;
for (int i = n - 1; i >= 0; i --)
{
while (!q.empty() && nums2[i] >= nums2[q.top()]) q.pop();
if (!q.empty()) res[nums2[i]] = nums2[q.top()];
else res[nums2[i]] = -1;
q.push(i);
}
for (auto i: nums1)
ans.push_back(res[i]);
return ans;
}
};