题目
![]()
解法1
点击查看代码
#include <iostream>
#include <stack>
using namespace std;
int main() {
int M, N, K;
cin >> M >> N >> K; // 读取栈的最大容量、入栈序列长度、查询序列数量
while (K--) { // 遍历 K 组出栈序列
stack<int> s;
int index = 1; // 模拟入栈的顺序,从 1 开始
bool valid = true; // 标记当前序列是否合法
for (int i = 0; i < N; i++) {
int x;
cin >> x;
// 先将数据按顺序压栈,直到栈顶是当前要出栈的元素
while (index <= N && (s.empty() || s.top() != x)) {
s.push(index++);
if (s.size() > M) { // 超出栈容量,非法
valid = false;
break;
}
}
// 检查栈顶是否匹配出栈元素
if (!s.empty() && s.top() == x) {
s.pop(); // 符合出栈顺序,出栈
} else {
valid = false; // 出现不匹配情况,非法
}
}
cout << (valid ? "YES" : "NO") << endl;
}
return 0;
}