解法一:模拟
根据栈顶和下一个待出栈元素的大小关系,决定进行出栈还是入栈操作,直到满足所给出栈顺序或者中间某一步无法实现。
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int M, N, K;
cin >> M >> N >> K;
deque<int> stack;
while (K-- > 0) {
stack.clear();
int index = 1;
int num;
string flag = "YES\n";
for (int i = 0; i < N; ++i) {
cin >> num;
// 保证非空
if (stack.size() < M && stack.empty()) {
stack.emplace_back(index++);
}
if (stack.back() == num) {
stack.pop_back();
} else if (stack.back() > num) {
flag = "NO\n";
} else {
while (stack.size() < M && stack.back() < num) {
stack.emplace_back(index++);
}
if (stack.back() == num) {
stack.pop_back();
} else {
flag = "NO\n";
}
}
}
cout << flag;
}
}