思想:如果要弹出一个数,那么说明比它小的数字已经进栈了,所以要在一个数num输入之后把比它小的数都输入到栈中,直到栈满或者val==num时结束入栈操作。如果val==num,将这个值弹出,否则说明整个序列存在问题,把flag变为false,输出结果。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std;
int a[1010];
int n,m,k;
bool check()
{
stack<int> q;
for(int i=1,j=0;i<=m;i++){
q.push(i);//不断将小于a[j]的数字压入栈,直到等于a[j]
if(q.size()>n) return false;//栈满,
while(q.size()&&q.top()==a[j]){
q.pop();
j++;
}
}
return q.empty();
}
int main()
{
cin>>n>>m>>k;
while(k--){
for(int i=0;i<m;i++){
cin>>a[i];
}
if(check()) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}