单调栈

题目链接

单调栈

看一下其他人的题解

点这里

单调栈就是快速的求距离当前这个数最左边最近的一个数,对当前的数和栈里面的元素进行判断如果当前的数大于等于栈顶的数,这让栈顶的数一直出栈,如果最后如果栈为空打印-1,否则打印栈顶元素,然后再将当前的数入栈.这样进行操作就可以解决问题

#include <iostream>
#include <cstdio>
#include <stack>

using namespace std;
int main() {
	int n;
	scanf("%d", &n);
	stack<int> s;
	while (n--) {//n个数依次判断
		int x;
		scanf("%d", &x);
		//如果栈不为空,并且栈顶元素大于等于x
		while (s.empty() != true && s.top() >= x) {
			s.pop();//弹栈
		}
		if (s.empty() == true) {//退出循环如果栈为空
			printf("-1 ");//打印-1
			s.push(x);//将x入栈

		} else {
			printf("%d ", s.top());//否则打印栈顶
			s.push(x);//将x入栈
		}

	}

	return 0;
}
posted @ 2023-04-06 21:41  harper886  阅读(8)  评论(0编辑  收藏  举报