题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805427332562944
【分析】
题意:栈的入栈和出栈。以1~N的顺序入栈,判断出栈序列是否和给定序列相同。
思路:如果栈顶元素和序列对应元素相等时,就pop掉,直到序列为空。如果存栈数目大于给定数目,flag=0,退出循环。(因为如果要出栈的话,肯定要与序列元素对应,不然就不可以出栈。所以,当入栈的数目大于m时,就说明不可以了。)
【代码】
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+5;
int a[1005];
stack<int>s;
int main()
{int m,n,k;scanf("%d%d%d",&m,&n,&k);while(k--){while(!s.empty())s.pop();int flag=1,t=1;for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++){s.push(i);if(s.size()>m){flag=0;break; } while(!s.empty()&&s.top()==a[t]){s.pop();t++;}}if(s.empty()&&flag)printf("YES\n");else printf("NO\n");}return 0;
}