感觉不会超时啊。
#include <bits/stdc++.h>
#define ll int
using namespace std;
bitset<100005> fk[10005];
ll no[10005];
ll a[100005],pos[100005],blo,n;
inline ll read() {
ll 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<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
int main() {
ll q;
n=read();
q=read();
blo=sqrt(n/log(n));
for (register ll i=1; i<=n; i++) {
a[i]=read();
pos[i]=(i-1)/blo+1;
if (fk[pos[i]][a[i]]==1)no[pos[i]]=1;
else
fk[pos[i]][a[i]]=1;
}
for (register ll i=1; i<=q; i++) {
ll l,r;
ll flag=0;
bitset<100005> use;
l=read();
r=read();
ll posl=pos[l],posr=pos[r];
for (register ll i=posl+1; i<posr; i++) {
if ((use&fk[i])!=0||no[i]) {
printf("No\n");
flag=1;
break;
}
use|=fk[i];
}
if (!flag)
for (ll i=l; i<=blo*posl; i++) {
if (use[a[i]]==1) {
printf("No\n");
flag=1;
break;
}
use[a[i]]=1;
}
if (posl!=posr&&!flag)
for (register ll i=blo*(posr-1)+1; i<=r; i++) {
if (use[a[i]]==1) {
printf("No\n");
flag=1;
break;
}
use[a[i]]=1;
}
if (!flag)
printf("Yes\n");
}
return 0;
}