//单调栈解题模版
vector<int> nextGreaterElement(vector<int>& nums){
vector<int>ans(nums.size());
stack<int>s;
for(int i=nums.size()-1;i>=0;i--){
while(!s.empty()&&s.top()<=nums[i]){
s.pop();
}
ans[i]=s.empty()?-1:s.top();
s.push(nums[i]);
}
return ans;
}
//环形单调栈
vector<int> nextGreaterElement(vector<int>& nums){
int n=nums.size();
vector<int>ans(n);
stack<int>s;
for(int i=2*n-1;i>=0;i--){
while(!s.empty()&&s.top()<=nums[i%n]){
s.pop();
}
ans[i%n]=s.empty()?-1:s.top();
s.push(nums[i%n]);
}
return ans;
}