时间安排
8:30–9:00 把题目都看了一下,T2是个DP,T4是个构造,T3,T1不知道是什么不过部分分很多。
9:00–9:40 T1,写暴力。对于 L=R 可以直接贪心。
9:30–10:10 T2, n<=20 和 col<=2 可以直接 DP 。对于链,可以用树状数组维护一下。对于正解,貌似可以虚树什么的,不过好像做不了。
10:10–11:00 T3, n<=3000 可以直接做。对于 K 的部分分可以用数据结构维护。其他档不知道有什么用。想到对 K 根号分治一下什么的,但是复杂度比较大。简单打了个表,发现数据随机的时候答案基本上是单峰的,写了个三分骗分。
11:00–11:50 T4,思考怎么构造,发现完全不会。
11:50–12:20 卡常数
12:20–13:00 思考T3,T1。
T1: 70 T2: 70 T3: 40 T4:0
回顾反思
T1: T1是一个贪心。想到两两配对必然有 n/2 个系数为1, n/2 个系数为-1,且系数为1应贪心的选r,-1的应贪心的选l,那么就先全选l,那么每一次由l变为r贡献为l+r,贪心取最大的 n/2 个就行了。这道题没有A掉有点可惜,考试的时候一直在想如何配对,而没有考虑其本质的数量关系。这种转化、贪心的能力要加强。
T2: 正解实际上就是在我卡上界背包上继续卡。对siz卡上界的背包是容易的,当形似树上每个点有颜色要求对各颜色分别进行背包时,对于背包合并可以维护枚举的上下界,其上界最大为该子树内该颜色点的个数
c
n
t
c
o
l
o
r
cnt_{color}
cntcolor,其下界为不是该颜色点的数
c
n
t
n
o
t
c
o
l
o
r
cnt_{notcolor}
cntnotcolor ,这里的
c
n
t
n
o
t
c
o
l
o
r
cnt_{notcolor}
cntnotcolor 往往会有一个隐性的限制,如要求该颜色的点数大于一半时,
c
n
t
n
o
t
c
o
l
o
r
cnt_{notcolor}
cntnotcolor 就不应超过
c
n
t
c
o
l
o
r
cnt_{color}
cntcolor 否则必然不会得到合法解,合并完将儿子的
c
n
t
cnt
cnt 与当前根的
c
n
t
cnt
cnt 相加并限制在合法范围内即可,这样枚举范围就是
c
n
t
c
o
l
o
r
cnt_{color}
cntcolor 级别。对每种颜色分别背包的复杂度就由
n
3
n^3
n3 变为
n
2
n^2
n2 。
树上背包卡上界
O
(
n
m
)
O(nm)
O(nm) 复杂度相关证明
T3: 关键思路是要想到分离
⌊
j
−
i
K
⌋
\lfloor \frac{j-i}{K}\rfloor
⌊Kj−i⌋ 中
i
i
i 和
j
j
j 的贡献,其次是要推出
⌊
j
−
i
K
⌋
=
⌊
j
K
⌋
−
⌊
i
K
⌋
−
[
j
m
o
d
K
<
i
m
o
d
K
]
\lfloor \frac{j-i}{K}\rfloor =\lfloor\frac{j}{K}\rfloor - \lfloor\frac{i}{K}\rfloor - [j \mod K < i \mod K]
⌊Kj−i⌋=⌊Kj⌋−⌊Ki⌋−[jmodK<imodK],那么贡献独立直接数据结构维护就行了。一个点是【外层树状数组维护
i
m
o
d
K
i\mod K
imodK 内层线段树维护下标
i
i
i 】可以被【分别维护
i
m
o
d
K
i \mod K
imodK 和
i
/
K
i/K
i/K 的树状数组套树状数组】代替。考试的时候没想到
⌊
j
−
i
K
⌋
\lfloor\frac{j-i}{K}\rfloor
⌊Kj−i⌋ 可以拆成这样的形式,所以根本无从下手正解。
T4: 神仙构造。