大概的题意:
将 1-n 按照顺序进栈,问 输入的序列是否是合法的出栈序列。
遍历序列,如果当前这个值a小于 栈顶的值,说明它还未进栈(因为我们是按照顺序进栈的),所以我们将 一些元素进栈,知道a进栈。
经过这个操作之后,现在的栈,是a进来之后即以后的情况了。
所以 ,这个时候 如果栈顶元素是a,那么是合法的。
否则是非法的。
cpp
#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;
}