求连通分量显然用并查集,根据
d
<
10
d < 10
d<10这一特殊条件,每个点连边只需向后10个去连即可。于是题目的关键变成了如何维护每个点与后10个点是否有连边。
每一次操作以等差数列的方式进行连边,考虑
d
=
1
d=1
d=1的情况,我们可以使用差分数组来实现离线的区间维护。
对于一般情况,我们可以多维护几个差分数组。令
m
a
r
k
[
i
]
[
j
]
[
t
]
mark[i][j][t]
mark[i][j][t]表示间隔为
i
i
i,总起点为
j
<
i
j < i
j<i的差分数组,再用相同结构的
s
u
m
[
i
]
[
j
]
[
t
]
sum[i][j][t]
sum[i][j][t]将差分数组变回原数组即可。
举个例子,对于第
x
x
x个数,在间隔为
d
d
d的情况下,对应的位置应该为
m
a
r
k
[
d
]
[
i
%
d
]
[
i
/
d
]
mark[d][i \% d][i / d]
mark[d][i%d][i/d]
注意,由于余数的范围从0开始,所以为了方便我将所有输入的
a
i
a_{i}
ai都减了1,即也从0开始。
相关文章
- 【题解】CF2020D-思路
- Xcode16 编译运行YYCache iOS18 sqlite3_finalize 闪退问题解决方案
- 【NOIP2018 Day1】题解
- Java Scala 混合编程导致 编译失败 ,【找不到符号】问题解决
- 问题解决: SSR 的 1080 端口被占用
- 【问题解决】C++调用shared_from_this报错bad_weak_ptr解决方案
- Thinkpad VMware 安装虚拟机出现此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态(问题解决方法)
- nullpointerxception——处理思路
- Codeforces Round 646 (Div. 2) E. Tree Shuffling(树,贪心)-思路
- 微信|QQ扫码登录网页版二维码失效问题解决方案 网站无法访问PC网页版如何解决 安卓软件历史版本下载 FV fooview悬浮球帮助教程