给定一个最多能存 M 个数字的栈,将 1∼N 按顺序压入栈中,过程中可随机弹出栈顶元素。
当 N 个数字都经历过入栈和出栈后,我们按照元素出栈的顺序,可以得到一个弹出序列。
现在给定一系列 1∼N 的随机排列序列,请你判断哪些序列可能是该栈的弹出序列。
例如,当 N=7,M=5 时,1, 2, 3, 4, 5, 6, 7可能是该栈的弹出序列,而 3, 2, 1, 7, 5, 6, 4 不可能是该栈的弹出序列。
输入格式
第一行包含三个整数 M,N,K,分别表示栈的容量,数字个数,需要判断的序列个数。
接下来 K 行,每行包含一个 1∼N 的排列。
输出格式
对于每个序列,如果可能是该栈的弹出序列,则输出一行 YES,否则输出一行 NO。
数据范围
1≤M,N,K≤1000
输入样例:
5 7 5
1 2 3 4 5 6 7
3 2 1 7 5 6 4
7 6 5 4 3 2 1
5 6 4 3 7 2 1
1 7 6 5 4 3 2
输出样例:
YES
NO
NO
YES
NO
#includeusing namespace std; int n,k,m; int main() { ios::sync_with_stdio(false); cin >> m >>n >>k; while(k--) { stack s; int val = 1; bool flag=true; for(int i=1;i<=n;i++) { int x; cin >> x; while(s.size() =val) { s.push(val); val++; } if(s.top()==x) s.pop(); else flag=false; } if(flag) cout <<"YES"<



