解法一:模拟
根据栈顶和下一个待出栈元素的大小关系,决定进行出栈还是入栈操作,直到满足所给出栈顺序或者中间某一步无法实现。
#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;}}
