乱搞。想清楚的话很简单的一道题,由于 x 数列每一项都由前一项唯一确定,对于任意T()确定的 x 数列,由于每个元素都指向一个元素(即,T(xi-1) = xi),所以最终一定可以弄出一个循环数列。那么,由于数列是由我们自己确定的,所以开始位置可以任选,这样的话,如果C数列中存在数字1的话,就一定可以得到所有的正整数,因为是一个既有1,又有2的循环队列,所以一定可以得到。如果C数列不存在1的话,那么同理所有的偶数是可以得到的。然后题目就变成了很简单的一道题了。。。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<functional>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<string>
#include<vector>
#include<queue>
#include<map>
#include<set>
#define REP(i, n) for(int i=0; i<n; i++)
#define FF(i, a, b) for(int i=a; i<b; i++)
#define FD(i, a, b) for(int i=a; i>=b; i--)
#define LL long long
#define PB push_back
#define MP make_pair
#define CLR(a, b) memset(a, b, sizeof(a))
using namespace std;
const int maxn = 10010;
int n, q;
int x;
int main()
{
while(~scanf("%d%d", &n, &q))
{
bool flag = 0;
REP(i, n) scanf("%d", &x);
REP(i, n)
{
scanf("%d", &x);
if(x == 1) flag = 1;
}
while(q--)
{
scanf("%d", &x);
if(x < 1) puts("NO");
else
{
if(x&1) printf("%s\n", flag ? "YES" : "NO");
else puts("YES");
}
}
}
return 0;
}