以下代码
#include <bits/stdc++.h>
using namespace std ;
int n , qq , aa[100005] , cnt[100005] , belong[100005] ;
int size , bnum , now ;
bool ans[100005] ;
struct que{
int l ;
int r ;
int id ;
};
que q[100005] ;
bool cmp (que a , que b ){
return belong[a.l] == belong[b.l] ? a.r < b.r : belong[a.l] < belong[b.l] ;
}
void add( int pos ){
if( !cnt[aa[pos]]) ++ now ;
++ cnt[aa[pos]] ;
}
void del( int pos ){
-- cnt[aa[pos]] ;
if(!cnt[aa[pos]]) now -- ;
}
int main(){
scanf("%d%d" , &n , &qq);
size = sqrt(n) ;
bnum = ceil((double) n / size );
for( int i = 1 ; i <= bnum ; ++ i ){
for( int j = ( i - 1) * size + 1 ; j <= i * size ; ++ j ){
belong[j] = i ;
}
}
for( int i = 1 ; i <= n ; ++ i ){
scanf("%d" , &aa[i] );
}
for( int i = 1 ; i <= qq ; ++ i ){
scanf("%d%d" , &q[i].l , &q[i].r );
q[i].id = i ;
}
sort( q + 1 , q + qq + 1 , cmp );
int l = 1 , r = 0 ;
for( int i = 1 ; i <= qq ; ++ i ){
int ql = q[i].l , qr = q[i].r ;
while( l < ql ) del(l ++ );
while( l > ql ) add(-- l );
while( r < qr ) add(++ r );
while( r > qr ) del(r -- );
if( now == q[i].r - q[i].l + 1 ){
ans[i] = true ;
}
}
for( int i = 1 ; i <= qq ; ++ i ){
if( ans[i] == true ){
printf("Yes\n");
}else{
printf("No\n");
}
}
return 0 ;
}
可以过样例但是交上去全WA
感谢大佬 好人一生平安