rt,代码如下,后5个点WA了
#include<bits/stdc++.h>
using namespace std;
const int Maxn=5e5+5;
int n,m,a[Maxn],belong[Maxn],answer[Maxn],vis[20005],ans;
struct node{
int l,r,id;
}q[Maxn];
bool cmp(node a,node b){
if(belong[a.l]==belong[b.l]){
if(belong[a.l]%2) return a.r<b.r;
else return b.r<a.r;
}
return a.l<b.l;
}
void add(int number){
vis[a[number]]++;
if(vis[a[number]]==1) ans++;
}
void del(int number){
vis[a[number]]--;
if(vis[a[number]]==0) ans--;
}
int main(){
cin>>n>>m;
int len=sqrt(n);
int belen=ceil((double)n/len);
for(int i=1;i<=belen;i++)
for(int j=(i-1)*len+1;j<=i*len;j++)
belong[j]=i;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>q[i].l>>q[i].r;
q[i].id=i;
}
sort(q+1,q+1+m,cmp);
int l=0,r=0;
for(int i=1;i<=m;i++){
while(l<q[i].l) del(l++);
while(l>q[i].l) add(--l);
while(r<q[i].r) add(++r);
while(r>q[i].r) del(r--);
if(ans==(q[i].r-q[i].l+1)) answer[q[i].id]=1;
}
for(int i=1;i<=m;i++) if(answer[i]==0) cout<<"No"<<endl; else cout<<"Yes"<<endl;
return 0;
}