#include <vector>;
#include <stack>;
using namespace std;
class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
vector<int> resp;
unordered_map<int, int> nextGreater;
stack<int> helper;
for(int n2 : nums2) {
if (helper.empty()) {
helper.push(n2);
}
else {
while(!helper.empty() && n2 > helper.top()) {
int toCreate = helper.top();
helper.pop();
nextGreater[toCreate] = n2;
}
helper.push(n2);
}
}
while(!helper.empty()) {
int lastOnes = helper.top();
helper.pop();
nextGreater[lastOnes] = -1;
}
for(int n1 : nums1) {
resp.push_back(nextGreater[n1]);
}
return(resp);
}
};