#include<cstdio>
#include<cstring>
#include<map>
#include<string>
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
int d[200100];
vector<int> q;
map<vector<int>,int> f;
int l[200100]={0},r[200100]={0};
int main(){
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for (int i=1;i<=n;i++) {
scanf("%d",&d[i]);
if (i<=k) q.push_back(d[i]) ;
}
f[q]=1;l[1]=1;r[1]=k;
for (int i=2;i<=n && i+k-1<=n;i++){
q.erase(q.begin());q.push_back(d[i+k-1]);
f[q]=i;l[i]=i;r[i]=i+k-1;
}
while (m--){
int x,y;
scanf("%d%d",&x,&y);
vector<int> d;
for (int i=1;i<=k;i++) {
int a;scanf("%d",&a);d.push_back(a);
}
int z=f[d];
if (x<=l[z] && r[z]<=y) printf("No\n"); else printf("Yes\n");
}
return 0;
#include<cstring>
#include<map>
#include<string>
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
int d[200100];
vector<int> q;
map<vector<int>,int> f;
int l[200100]={0},r[200100]={0};
int main(){
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for (int i=1;i<=n;i++) {
scanf("%d",&d[i]);
if (i<=k) q.push_back(d[i]) ;
}
f[q]=1;l[1]=1;r[1]=k;
for (int i=2;i<=n && i+k-1<=n;i++){
q.erase(q.begin());q.push_back(d[i+k-1]);
f[q]=i;l[i]=i;r[i]=i+k-1;
}
while (m--){
int x,y;
scanf("%d%d",&x,&y);
vector<int> d;
for (int i=1;i<=k;i++) {
int a;scanf("%d",&a);d.push_back(a);
}
int z=f[d];
if (x<=l[z] && r[z]<=y) printf("No\n"); else printf("Yes\n");
}
return 0;
}
直接用map哈哈哈航啊哈和
终于懂了数组怎么哈希了直接用vector