rt,人已经麻了,对着题解调了好久都没用
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll rd();
const ll N=1e6+1;
int n,q;
ll a[N];
int sq;
struct node
{
ll l,r,id;
}Q[N];
bool cmp(const node &a,const node &b)
{
/*
if(a.l/sq!=b.l/sq) return a.l<b.l;
if(a.l/sq&1) return a.r<b.r;
return a.r>b.r;
*/
return (a.l/sq) == (b.l/sq) ? a.r < b.r : a.l < b.l;
}
int ans=0;
int cnt[N];
void add(int x)
{
/*
if(cnt[a[x]]==0) ans++;
cnt[a[x]]++;
*/
if((++cnt[a[x]])==1) ++ans;
}
void del(int x)
{
/*
cnt[a[x]]--;
if(!cnt[a[x]]==0) ans--;
*/
if((--cnt[a[x]])==0) --ans;
}
int L,R;
bool Ans[N];
int main()
{
//freopen(".in","r",stdin);freopen(".out","w",stdout);
n=rd(),q=rd();
sq=(int)sqrt(n);
for(int i=1;i<=n;i++) a[i]=rd();
for(int i=1;i<=q;i++)
{
Q[i].l=rd();
Q[i].r=rd();
Q[i].id=i;
}
sort(Q+1,Q+1+q,cmp);
for(int i=1;i<=q;i++)
{
int l=Q[i].l,r=Q[i].r;
while(L<l) del(a[L++]);
while(L>l) add(a[--L]);
while(R<r) add(a[++R]);
while(R>r) del(a[R--]);
if(ans==(r-l+1)) Ans[Q[i].id]=1;
}
for(int i=1;i<=q;i++)
{
if(Ans[i]==1) puts("Yes");
else puts("No");
}
//fclose(stdin);fclose(stdout);
return 0;
}
ll rd()
{
ll x=0;
char c=getchar();
while(!isdigit(c))
{
c=getchar();
}
while(isdigit(c))
{
x=(x<<1)+(x<<3)+c-'0';
c=getchar();
}
return x;
}