D e t a i l i s w h a t r e a l l y m a t t e r s \mathcal{Detail\ is\ what \ really \ matters} Detail is what really matters
A
我们需要寻找一些性质
1:若一个点可以在第
i
i
i 个,那么一定可以在
j
≥
i
j\ge i
j≥i 个
有了这个性质我们只需要统计能在第
i
i
i 个的个数就可以快速计算答案
2:若
t
t
t 最早可以在第
i
i
i 个,那么
r
≥
t
r\ge t
r≥t 不会最早在第
j
<
i
j<i
j<i 个
知道了这个我们可以直接枚举当前最早的时间
然后考虑怎么移动
一个贪心策略上将棋子放在
1
,
3
,
5
…
1,3,5\dots
1,3,5…
考虑求
t
t
t 能否在第
k
k
k 个,将前
k
−
1
k-1
k−1 个移除
于是我们只需要判断剩下的在
t
t
t 前的棋子能不能这样放
即
min
(
a
i
−
(
2
i
−
1
)
)
+
2
(
k
−
1
)
≥
0
\min(a_i-(2i-1))+2(k-1)\ge 0
min(ai−(2i−1))+2(k−1)≥0
用单调队列维护这最小值就可以了
B
设两个区间为
[
l
,
r
]
,
[
L
,
R
]
[l,r],[L,R]
[l,r],[L,R]
容易发现有三种可能的方式,
(
l
−
1
,
r
)
,
(
L
−
1
,
R
)
(l-1,r),(L-1,R)
(l−1,r),(L−1,R),
(
l
−
1
,
L
−
1
)
,
(
r
,
R
)
(l-1,L-1),(r,R)
(l−1,L−1),(r,R),
(
l
−
1
,
R
)
,
(
r
,
L
−
1
)
(l-1,R),(r,L-1)
(l−1,R),(r,L−1)
分别跑最短路就可以了
C
k
=
3
k=3
k=3 时我们枚举中间的边
k
=
4
k=4
k=4时我们枚举中间的点,需要维护这个点到起点终点经过另一个点的最小值
两个点可能重复,所以要维护一个次小值
k
=
5
k=5
k=5 我们枚举中间的边,容易发现还需要维护第
3
3
3 小
D
容易发现相同深度的贡献相同
并且这个贡献是成周期变换的,周期
T
=
min
(
2
k
∣
n
≤
2
k
)
T=\min(2^k\mid n\le 2^k)
T=min(2k∣n≤2k)
这样已经可以
O
(
d
e
p
2
)
\mathcal{O}(dep^2)
O(dep2) 得到
60
60
60 分的好成绩
我们把贡献打一个表,大概长成这个样子:
观察得到,长度为
T
T
T 的周期中每
T
2
\frac{T}{2}
2T 可以分成一段
每一段可以从上一个周期递推过来,于是复杂度是
∑
i
2
i
T
2
i
−
1
=
O
(
n
log
n
)
\sum_i 2^i\frac{T}{2^{i-1}}=\mathcal{O}(n\log n)
∑i2i2i−1T=O(nlogn)