#include<bits/stdc++.h>
using namespace std;
#define maxs 1000
typedef struct node{
int c;
int top;
int D[maxs];
}*Stack;
int is(int *p,int m,int n);
Stack creat(int m);
int push(Stack s,int x);
int Top(Stack s);
void dis(Stack s);
void Pop(Stack s);
int main()
{
int m,n,k;
cin>>m>>n>>k;
int p[1000];
while(k--)
{
for(int i=0;i<n;i++)
cin>>p[i];
if(is(p,m,n))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
int is(int *p,int m,int n)
{
Stack s=creat(m);
int head=0;
for(int i=1;i<=n;i++)
{
if(!push(s,i))
{
dis(s);
return 0;
}
while(Top(s)==p[head])
{
head++;
Pop(s);
}
}
dis(s);
if(head!=n)
return 0;
return 1;
}
Stack creat(int m)
{
Stack s=(Stack)malloc(sizeof(node));
s->c=m;
s->top=-1;
return s;
}
int push(Stack s,int x)
{
if(s->c-s->top<=1)
return 0;
s->D[++s->top]=x;
return 1;
}
int Top(Stack s)
{
if(s->top>=0)
return s->D[s->top];
else
return -1;
}
void dis(Stack s)
{
free(s);
}
void Pop(Stack s)
{
s->top--;
}
满足条件:
1.要判断m 不能超过m长,堆栈只能存这些长度
2.读入的同时要比较