今天是 DS 选讲,理解了大部分内容,还有一些自己口胡了,很好。
ARC 打的有点难受,因为电脑有点稀碎(指编译 1min+),机房的电脑又用不习惯。
具体表现为会 E 差一点过,可惜。
CF713C Sonya and Problem Wihtout a Legend
slope trick 入门题。
具体的,写出 DP 会发现只需要支持取前缀 min,加入一个绝对值函数这样的操作。
用堆维护凸函数斜率增加点,于是操作相当于:插入拐点,将最后一个拐点删除并计算答案,于是可以用堆做到 \(O(n\log n)\)。
CF1017G The Tree
用懒标记维护操作 1,于是考虑 23 操作怎么适配进来。
3 操作是好适配的,可以认为初始时所有值都是 \(-1\) 然后询问到根的最大后缀和,操作 1 就是单点增加。
问题在操作二,发现我们不能简单的赋值成 \(-1\),因为此时可能会有什么东西下来,从而影响到下面,发现在子树的根处减去对应答案就可以了。
于是树剖做到 \(O(n\log n)\),需要支持单点改,区间 cover,区间询问最大后缀和。
ARC172
赛时通过 ABC,E 差一个细节,D 没细想,F 明天有时间会看看。
A:从大到小放置正方形,会发现每个正方形会把当前的矩形分割成至多两部分,用 multiset 暴力模拟插入删除即可,\(O(n^2\log n)\)。
B:问题等价于每个长度为 \(n-k+1\) 段内不能有相等的元素,于是答案就是 \(\binom{L}{N-K}(L-(N-K))^{K}\),直接计算即可,\(O(n)\)。
C:先求出前缀和,观察到将首个东西向后放一格只会影响一个前缀和,于是可以快速判断,\(O(n)\)。
D:令读入顺序是 \(b_{i,j}\),构造 \(a_{i,i}=inf\),\(a_{i,j}=n(n-1)/2-b_{i,j}\) 就是对的,理由是直接写出距离会发现可以舍掉若干小量,于是只会与 \(a_{i,j}\) 相关这样的。
E:\(10^9=2^95^9\),注意到 \(n^n\) 在 \(2^9\) 的循环节是 \(2^9\),\(5^9\) 的循环节是 \(4\times 5^9\),均可以暴力预处理出每个 \(x\) 对应的数在这些循环节下可能的数,这样的数对不会太多,于是令 \(2^9\) 下是 \(a\),\(5^9\) 下是 \(b\),枚举 \(b+k\times 5^9\) 并检验是否符合 \(a\) 即可,需要注意 \(0^0=0\)。