后面五个点超时了…
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,m,a[100010],q,l,r,unok,ans[100010];
int jsq[100010];
struct st{
int l,r,bl,id;
}Q[100010];
bool cmp(st a,st b){
return a.bl!=b.bl?a.l<b.l:((a.bl&1)?a.r<b.r:a.r>b.r);
}
int main()
{
scanf("%d%d",&n,&q);
for (int i=1;i<=n;i++)scanf("%d",&a[i]);
m=sqrt(n);
for (int i=1;i<=q;i++){
scanf("%d%d",&Q[i].l,&Q[i].r);
Q[i].bl=(l-1)/m+1;Q[i].id=i;
}
sort(Q+1,Q+1+q,cmp);
l=0;r=0;
for (int i=1;i<=q;i++){
while (l<Q[i].l){
if (jsq[a[l]]==2)unok--;
jsq[a[l]]--;l++;
}
while (l>Q[i].l){
l--;
if (jsq[a[l]]==1)unok++;
jsq[a[l]]++;
}
while (r<Q[i].r){
r++;
if (jsq[a[r]]==1)unok++;
jsq[a[r]]++;
}
while (r>Q[i].r){
if (jsq[a[r]]==2)unok--;
jsq[a[r]]--;r--;
}
// printf("%d %d: %d\n",Q[i].l,Q[i].r,unok);
ans[Q[i].id]=unok;
}
for (int i=1;i<=q;i++){
if (ans[i])printf("No\n");
else printf("Yes\n");
}
return 0;
}