分析
显然每次可以选当前匹配到的后面第一个可选的
可以把所有数的位置都记下来,每次upper_bound下一个位置即可
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int N=1e5+4;
int n,m,q;
vector<int>V[N];
int main() {
int t; scanf("%d%d%d%d",&t,&n,&q,&m);
for(int i=1;i<=n;i++) {
int t;scanf("%d",&t);
V[t].pb(i);
}
while(q--) {
scanf("%d",&m);
int now=0; bool fl=0;
for(int i=1;i<=m;i++) {
int t; scanf("%d",&t);
if(fl) continue;
auto u=upper_bound(V[t].begin(),V[t].end(),now);
if(u==V[t].end()) {
puts("No"); fl=1;
continue;
}
now=*u;
}
if(!fl) puts("Yes");
}
return 0;
}