#include<stdio.h>
int ss(int *a,int *b,int c);
int main(){
int a,b,c[10],d[10],n,m;
scanf("%d",&a);
for(;a;){
scanf("%d",&b);
for(n=0;n<a;n++){
scanf("%d",&c[n]);
}
for(n=0;n<b;n++){
for(m=0;m<a;m++){
scanf("%d",&d[m]);
}
if(ss(c,d,a)){
printf("Yes\n");
}else{
printf("No\n");
}
}
scanf("%d",&a);
}
}
int ss(int *a,int *b,int c){
if(!c)return 1;
if(a[0]!=b[0])return 0;
int d[9],e[9],f[9],g[9],n=1,i=0,j=0;
for(;n<c;n++){
if(a[n]<a[0]){
d[i]=a[n];
i++;
}else{
e[j]=a[n];
j++;
}
}
for(n=1,i=j=0;n<c;n++){
if(b[n]<a[0]){
f[i]=b[n];
i++;
}else{
g[j]=b[n];
j++;
}
}
return ss(d,f,i)&&ss(e,g,j);
}
第二种解法
#include<stdio.h>
int main(){
int a,b,e[2048],f[2048],n,m;
scanf("%d",&a);
for(;a;){
for(n=1;n<2048;n++){
e[n]=0;
}
scanf("%d",&b);
for(n=0;n<a;n++){
scanf("%d",&e[0]);
for(m=1;e[m];){
if(e[m]<e[0]){
m=2*m+1;
}else{
m*=2;
}
}
e[m]=e[0];
}
for(n=0;n<b;n++){
for(m=1;m<2048;m++){
f[m]=0;
}
for(m=0;m<a;m++){
scanf("%d",&e[0]);
for(f[0]=1;f[f[0]];){
if(e[f[0]]<e[0]){
f[0]=2*f[0]+1;
}else{
f[0]*=2;
}
}
if(e[f[0]]!=e[0]){
printf("No\n");
for(f[0]=m+1;f[0]<a;f[0]++){
scanf("%d",&e[0]);
}
break;
}
f[f[0]]=1;
}
if(m==a){
printf("Yes\n");
}
}
scanf("%d",&a);
}
}