class Solution {
public:
stack<int> stk;
vector<int> nextGreaterElements(vector<int>& nums) {
int n = nums.size();
vector<int> res(n, -1);
for (int i = 0; i < n * 2; i ++ ) {
while (stk.size() && nums[i % n] > nums[stk.top() % n]) {
int j = stk.top();
stk.pop();
res[j % n] = nums[i % n];
}
stk.push(i % n);
}
return res;
}
};