RT
刚学莫队写的,可能对莫队的理解不够深入,求助/kk
#include<cstdio>
#include<algorithm>
#include<cmath>
#define MAXN 300010
using namespace std;
struct node{
int l,r,ind,cl;
};
node in[MAXN];
int cnt[MAXN],a[MAXN],ans[MAXN],k=0;
inline int read()
{
register int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*f;
}
inline bool cmp(node &x,node &y)
{
return ((x.cl!=y.cl)?(x.l<y.l):((x.cl&1)?(x.r<y.r):(x.r>y.r)));
}
inline void add(int v)
{
if(++cnt[a[v]]==1)
k++;
}
inline void del(int v)
{
if(--cnt[a[v]]==0)
k--;
}
signed main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
int n,m,len,l=1,r=0;
n=read(),m=read(),len=pow(n,2.0/3.0);
for(register int p=1;p<=n;p++)
a[p]=read();
for(register int p=1,L_,R_;p<=m;p++)
{
L_=read(),R_=read();
in[p].l=L_,in[p].r=R_,in[p].ind=p,in[p].cl=(p-1)/len+1;
}
sort(in+1,in+m+1,cmp);
for(register int p=1;p<=m;p++)
{
while(l<in[p].l)del(l++);
while(l>in[p].l)add(--l);
while(r<in[p].r)add(++r);
while(r>in[p].r)del(r--);
ans[in[p].ind]=int((k==in[p].r-in[p].l+1)?1:0);
}
for(register int p=1;p<=m;p++)
if(ans[p])puts("Yes");
else puts("No");
}