这道题如果你会建立二叉搜索树的话应该就没什么问题了,比较的话就是从上到下依次比较看是否相等,比较简单。代码如下:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1024+7;
int n,m,a[maxn],b[maxn];
void build1()
{
memset(a,-1,sizeof a);
for(int i=0;i<n;i++)
{
int id=1,x;
cin>>x;
while(1)
{
if(a[id]==-1) {a[id]=x;break;}
else if(x<a[id]) id*=2;
else id=2*id+1;
}
}
}
void build2()
{
memset(b,-1,sizeof b);
for(int i=0;i<n;i++)
{
int id=1,x;
cin>>x;
while(1)
{
if(b[id]==-1) {b[id]=x;break;}
else if(x<b[id]) id*=2;
else id=2*id+1;
}
}
}
bool check()
{
for(int i=1;i<maxn;i++)
if(a[i]!=b[i]) return false;
return true;
}
int main()
{
while(~scanf("%d %d",&n,&m)&&n>0)
{
build1();
for(int i=0;i<m;i++)
{
build2();
if(check()) puts("Yes");
else puts("No");
}
}
}