模拟压栈、弹栈操作,判断合法性
#include <iostream>
#include <cstdio>
#include <stack>
using namespace std;
int main(){
int m, n, k;
scanf("%d%d%d", &m, &n, &k);
for(int i = 0; i < k; ++i){
stack<int> s;
bool valid = true;
int curr = 1;
for(int j = 0; j < n; ++j){
int num;
scanf("%d", &num);
if(valid){
while(s.empty() || s.top() != num){
s.push(curr++);
if((int)s.size() > m){
valid = false;
break;
}
}
if(valid && s.size() && s.top() == num) s.pop();
}
}
if(valid) printf("YES\n");
else printf("NO\n");
}
return 0;
}