模拟整个栈的出入栈情况就好了。
#include <iostream>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#define MAX 1010
using namespace std;
//m最大容量 n序列长度 k出栈序列个数
int m,n,k;
int PopSeq[MAX];
bool isPop(int a[]){
stack <int> s;
s.empty();
s.push(1);
int pos = 1,i = 2;
while(!s.empty()){
if(s.size()>m)
return false;
int top = s.top();
if(top == a[pos]){
s.pop();
pos++;
if(s.empty() && i<= n)
s.push(i++);
}
else if(top > a[pos])
return false;
else
s.push(i++);
}
return true;
}
int main(){
scanf("%d%d%d",&m,&n,&k);
for(int i = 0 ; i< k;i++){
for(int j = 1 ; j <= n ;j++){
scanf("%d",&PopSeq[j]);
}
if(isPop(PopSeq))
printf("YES\n");
else
printf("NO\n");
}
return 0;
}