社区讨论

分块TLE20分

P1972[SDOI2009] HH 的项链参与者 5已保存回复 14

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
14 条
当前快照
1 份
快照标识符
@mhjkvpvw
此快照首次捕获于
2025/11/04 04:13
4 个月前
此快照最后确认于
2025/11/04 06:32
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10,M=1e3+10;
bitset<N>ans,t[M];
int a[N];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n,m,q;
	cin>>n;
	m=sqrt(n);
	for(int i=0;i<n;i++){
		cin>>a[i];
		t[i/m][a[i]]=true;
	}
	cin>>q;
	while(q--){
		int l,r;
		cin>>l>>r;
		--l;
		--r;
		ans.reset();
		if(l/m==r/m){
			for(int i=l;i<=r;i++){
				ans[a[i]]=true;
			}
		}else{
			for(int i=l;i<=l/m*m+m-1;i++){
				ans[a[i]]=true;
			}
			for(int i=l/m+1;i<=r/m-1;i++){
				ans|=t[i];
			}
			for(int i=r/m*m;i<=r;i++){
				ans[a[i]]=true;
			}
		}
		cout<<ans.count()<<'\n';
	}
	return 0;
}
本蒟蒻不会卡常,哪个大佬能教一下吗?
码风很丑,不喜勿喷。

回复

14 条回复,欢迎继续交流。

正在加载回复...