用的就是莫队,后5个点RE,求条.
#include <bits/stdc++.h>
using namespace std;
const int N=1e3+5;
int a[N],cnt[100005],as[N];
struct query{
int l,r,p,ans;
} Q[N];
bool cmp(query a, query b)
{
return (a.l/b.l)==(b.l/b.l)?a.r<b.r:a.l<b.l;
}
int main()
{
int n,q;
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=q;i++)
{
cin>>Q[i].l>>Q[i].r;
Q[i].p=i;
}
sort(Q+1,Q+q+1,cmp);
int culL=1,culR=1;
cnt[a[1]]++;
for(int i=1;i<=q;i++)
{
while(culL<Q[i].l)
culL++,cnt[a[culL-1]]--;
while(culR<Q[i].r)
culR++,cnt[a[culR]]++;
while(culL>Q[i].l)
culL--,cnt[a[culL]]++;
while(culR>Q[i].r)
culR--,cnt[a[culR+1]]--;
bool flag=1;
for(int i=1;i<=N;i++)
{
if(cnt[i]>1)
{
flag=0;
break;
}
}
Q[i].ans=flag;
}
for(int i=1;i<=q;i++)
{
as[Q[i].p]=Q[i].ans;
}
for(int i=1;i<=q;i++)
{
if(as[i]==1) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}