单调栈题型
暴力做法
然后寻找性质
横轴是下标,纵轴是值
a[i] 之后要插进来
如果栈顶元素stk[tt] >= a[i]的话,那么stk[tt]就可以被删掉
一直删到找到了一个小于a[i]的栈顶元素为止
如果stk[tt] < a[i]了,那么此时stk[tt]就是我要找的a[i]的左边,离a[i]最近的,且比它小的元素了
输出后,然后再把a[i]插到栈里面去
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 100010; 4 int stk[N], tt; 5 int main() { 6 int n; 7 cin >> n; 8 for (int i = 0; i < n; i++) { 9 int x; 10 cin >> x; //每次读入一个x 11 while (tt > 0 && stk[tt] >= x) { //只要栈是不空的,且栈顶元素大于等于x 12 tt--; 13 } 14 if (tt) { //如果还是不空的 15 cout << stk[tt] << " "; //那么栈顶元素就是答案 16 } else { 17 cout << -1 << " "; 18 } 19 stk[++tt] = x; //加进去 20 } 21 return 0; 22 }