https://pintia.cn/problem-sets/994805342720868352/problems/994805427332562944
/* *stack的使用,先进后出 *预先清空栈 *注意栈容量 */ #include<iostream> using namespace std; #include<cstdio> #include<stack> stack<int> Stack; const int MAXN=1010; int arr[MAXN]; int main() { int capacity,length,check; scanf("%d%d%d",&capacity,&length,&check); while(check--) { while(!Stack.empty()) { //预先清空栈 Stack.pop(); } for(int i=1;i<=length;i++) { scanf("%d",&arr[i]); //注意循环输入格式&arr[i] } int now=1; bool flag=true; for(int i=1;i<=length;i++) { Stack.push(i); if(Stack.size()>capacity) { flag=false; break; } //栈顶元素与出栈序列当前位置的元素相同时 while(!Stack.empty()&&Stack.top()==arr[now]) { Stack.pop(); now++; } } if(Stack.empty()==true&&flag==true) { printf("YES\n"); }else { printf("NO\n"); } } return 0; }