- 思路:
- 将1~n入栈,在入栈的过程中检测入栈元素是否等于出栈序列当前元素, 那么就让栈顶元素出栈,同时将序列当前元素位置标记向后移动一位;
- 只要栈顶元素等于当前序列元素,继续出栈。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100;
stack<int> st;
int arr[maxn]; // 存储待判断的序列
int main() {
int m, n, T; // m栈容量, n元素范围, T个检测序列
cin >>m >>n >>T;
while (T--) {
for (int i = 0; i < st.size(); i++) { // 清空栈
st.pop();
}
for (int i = 1; i <= n; i++) { // 输入待检测序列
cin >>arr[i];
}
int current = 1;
bool flag = true;
for (int i = 1; i <= n; i++) { // 将1-n 逐个入栈并检测
st.push(i);
if (st.size() > m) {
flag = false;
break;
}
while (!st.empty() && st.top() == arr[current]) {
st.pop();
current++;
}
}
if (st.empty() && flag == true) {
cout <<"YES" <<endl;
}
else {
cout <<"NO" <<endl;
}
}
return 0;
}