大概的题意:
将 1-n 按照顺序进栈,问 输入的序列是否是合法的出栈序列。
遍历序列,如果当前这个值a小于 栈顶的值,说明它还未进栈(因为我们是按照顺序进栈的),所以我们将 一些元素进栈,知道a进栈。
经过这个操作之后,现在的栈,是a进来之后即以后的情况了。
所以 ,这个时候 如果栈顶元素是a,那么是合法的。
否则是非法的。
#include <bits/stdc++.h>
using namespace std;
int n;
判断是否 是 合法的出栈顺序
bool solve()
{vector<int>ve(n);for (int i=0;i<n;i++)cin>>ve[i];stack<int>st;st.push(1);int max=1;for(auto i:ve){if (i>max){for (int j=max+1;j<=i;j++)st.push(j); max=i;}if (st.top()!=i){return false;}else {st.pop();}}return true;
}
int main()
{std::cin.tie(nullptr)->sync_with_stdio(false); while(cin>>n){if (solve())cout<<"Yes\n";else cout<<"No\n";} return 0;
}