求调
#include<bits/stdc++.h>
using namespace std;
int len;
struct node{int id,l,r,val;}qs[100009];
int ar[100009];
bool cmp(node a,node b){
if(a.l/len==b.l/len) return a.l<b.l;
return a.l/len<b.l/len;
}
bool cmp1(node a,node b){
return a.id<b.id;
}
int sum[10009];//sum[i]表示数字i出现次数
void add(int i){sum[i]++;}
void del(int i){sum[i]--;}
int main(){
int n,q;
cin >> n >> q;
len=sqrt(n);
for(int i=0;i<n;i++){
cin >> ar[i];
}
for(int i=0;i<q;i++){
int ll,rr;
cin >> ll >> rr;
qs[i].id=i,qs[i].l=ll,qs[i].r=rr;
}
sort(qs,qs+q,cmp);
int ll=0,rr=0;
for(int i=0;i<q;i++){
while(ll<qs[i].l)del(ar[ll]++);
while(ll>qs[i].l)add(ar[ll]--);
while(rr<qs[i].r)add(ar[rr]++);
while(rr>qs[i].r)del(ar[rr]--);
if(sum[ar[ll]]==rr-ll+1){
qs[i].val=1;
}
}
sort(qs,qs+q,cmp1);
for(int i=0;i<q;i++){
cout << (qs[i].val?"Yes":"No");
cout << endl;
}
return 0;
}