//堆栈实现
#include <stdio.h>
#include <stdlib.h>
Stack CreateStack();
bool Push(Stack S,int X);
bool IsEmpty(Stack S);
int StackCnt(Stack S);//统计栈里边元素的个数
int Pop(Stack S);
bool judge(int m,int a[]);
//1、输入序列
//2、判断是否满足要求
//3、输出结果
int main()
{
int m,n,k;
int i,j;
int *a;
int result = 0;
int flag = 0;
scanf("%d %d %d",&m,&n,&k);
a = (int*)malloc(N*sizeof(int));
for(i=0;i<k;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&a[j]);
}
if(judge(m,a)
printf("YES\n");
else
printf("NO\n");
}
}
//1、堆栈满,但栈顶元素小于待输出元素
//2、栈顶元素大于待输出元素
bool judge(int m,int a[],int n)
{
int maxsize = m,now = 1;
int j;
Stack s;
s = CreateStack();
for(j=0;j<n;j++)
{
while(IsEmpty(s)||a[j]!=now) //只要栈不空或者栈顶元素不等于将要出栈的元素,就入栈
{
Push(s,now);
now++;
if(StackCnt(s)>maxsize)
return false;
}
while
{
}
}
}