class Solution {
public:
    vector<vector<int> > foundMonotoneStack(vector<int>& nums) {
        int len=nums.size();
        //调用vector的无参构造函数创建一个长度为len,宽为1的二维容器
        vector<vector<int>> ans(len);
        //遍历二维容器的每一行,调用resize函数将容器的每一行的列宽都扩大为2
        for(int i=0;i<len;i++) ans[i].resize(2);
        //写两个单调栈
        stack<int> stack1;
        //正向遍历,如果栈非空,并且栈顶元素比要入栈的元素大,则让栈顶的元素出栈
        //判断一下,如果栈为空,则表示该元素的左边没有比本元素小的元素,输出-1
        //否则输出向左遍历找到的第一个比当前的元素小的元素(单调栈)
        //将当前的元素入栈
        for(int i=0;i<len;i++){
            while(!stack1.empty()&&nums[stack1.top()]>=nums[i]){
                stack1.pop();
            }
            if(stack1.empty()) ans[i][0]=-1;
            else  ans[i][0]=stack1.top();
            stack1.push(i);
        }
        //将刚刚构造的单调栈清空
        //逆向遍历重新构造一个单调栈,用于查找当前元素右边第一个比当前元素小的元素
        while(!stack1.empty()) stack1.pop();
        for(int i=len-1;i>=0;i--){
            while(!stack1.empty()&&nums[stack1.top()]>=nums[i]){
                stack1.pop();
            }
            if(stack1.empty()) ans[i][1]=-1;
            else ans[i][1]=stack1.top();
            stack1.push(i);
        }
        return ans;
    }
   
};