蒟蒻莫队0分求调,能过样例
查看原帖
蒟蒻莫队0分求调,能过样例
950927
_luo_gu楼主2024/1/5 20:40

以下代码

#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

感谢大佬 好人一生平安

2024/1/5 20:40
加载中...