P3901求调
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,m,sq;
int a[N],cnt[N],ans[N];
struct node
{
int L,R,id;
}q[N];
bool cmp(node x,node y)
{
return (x.L/sq)==(y.L/sq)?x.R<y.R:x.L<y.L;
}
int ANS;
void add(int x)
{
if((++cnt[a[x]])==1)ANS++;
}
void del(int x)
{
if(!(--cnt[a[x]]))ANS--;
}
int L,R;
int main(){
cin>>n;
sq=sqrt(n);
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
cin>>m;
for(int i=1; i<=m; i++)
{
scanf("%d%d",&q[i].L,&q[i].R);
q[i].id=i;
}
sort(q+1,q+1+m,cmp);
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(R-L==ANS)ans[q[i].id]=1;
}
for(int i=1; i<=m; i++)
if(ans[i])puts("Yes");
else puts("No");
return 0;
}