题目描述

分析:
判断所给的出栈顺序是否合理,注意栈的大小有限制,用一个数组记录出栈顺序,完后按顺序将数字进行入栈,如果当前栈顶元素等于当前出栈队列的数,那么出栈,出栈队列向后移动一位,最后如果栈为空输出yes否则输出no,注意每一步要判断是否超出栈的大小。
#include<cstdio>
#include<stack>
using namespace std;
int a[1005];
stack<int> s;
int main(){
int m,n,t;
scanf("%d%d%d",&m,&n,&t);
while(t--){
while(!s.empty()){
s.pop();
}
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
int now=1;
bool flag=true;
for(int i=1;i<=n;i++){
s.push(i);
if(s.size()>m){
flag=false;
break;
}
while(!s.empty()&&s.top()==a[now]){
s.pop();
now++;
}
}
if(s.empty()&&flag){
printf("YES\n");
}
else{
printf("NO\n");
}
}
return 0;
}