分析:栈的模拟,判断序列是否能为出栈序列,这种模拟有点小绕,关键要理清逻辑
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <stack>
#include <map>
#include <algorithm>
#define MAX 999999999
using namespace std;
int n,m,k;
int main()
{
stack<int>s;
cin>>m>>n>>k;
while(k--)
{
while(!s.empty())
s.pop();
int cnt = 1;
int a[n];
for(int i = 0;i<n;i++)
cin>>a[i];
int flag = 0;
for(int i = 0;i<n;i++){
while((s.size() == 0 || s.top() < a[i]) && cnt<=n)
s.push(cnt++);
if(s.size() > m || s.top() > a[i])
{
flag = 1; break;
}
if(s.top() == a[i])
s.pop();
if(flag == 1)break;
}
if(flag == 1)
cout<<"NO\n";
else
cout<<"YES\n";
}
return 0;
}