#include <iostream>
#include <stack>
using namespace std;
int main(){
int m, n, k;
cin >> m >> n >> k;
for(int i = 0; i < k; i++){
int rec[n + 1], ind = 1, flag = 0, cnt = 0;
stack<int> st;
for(int j = 1; j <= n; j++) cin >> rec[j];
for(int j = 1; j <= n;){
while(st.empty() || rec[j] > st.top()){
st.push(ind++); cnt++;
}
if(cnt > m){
flag = 1; break;
}
while(!st.empty() && rec[j] <= st.top()){
if(st.top() != rec[j]){
flag = 1; break;
}
st.pop(); j++; cnt--;
}
if(flag) break;
}
if(flag) printf("NO\n");
else printf("YES\n");
}
return 0;
}
二次精简
#include <iostream>
#include <stack>
using namespace std;
int main(){
int m, n, k;
cin >> m >> n >> k;
for(int i = 0; i < k; i++){
int rec[n + 1], ind = 1, flag = 1, cnt = 0;
stack<int> st;
for(int j = 1; j <= n; j++) cin >> rec[j];
for(int j = 1; j <= n; j++){
st.push(j);
if(st.size() > m){
flag = 0; break;
}
while(!st.empty() && st.top() == rec[ind]){
st.pop(); ind++;
}
}
if(st.empty() && flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}