CF 下分记录
924 div2
\(+61=2141\)
C 想得不是很清楚,有个 \(\pm1\) 在代码里反了,拍了一下才检查出来。这种题还是在草稿纸上写清楚吧
E 一开始想的是判定性 DP,胡了一会才想到可以把一个状态放到 DP 值里。没开 LL
吃了个罚时,唉
难得在最后 5min 过了 E,安享晚年.jpg
hello2024
\(+31=2080\)
签得很慢
zsy 很早就告诉我 D 容易/jk
好在会 F1,不至于掉分。不过把 bld
改成 mdf
的时候没判断递归哪边吃了个罚时
过了零点脑子完全不转了,最后也不会 D
C. Grouping Increases
赛时写了个线段树优化 dp。。。
考虑贪心。设 \(x\le y\) 为两个子序列末尾的元素。加入 \(a_{i}\) 时,
- 若 \(a_{i}\le x\),令 \(x=a_{i}\)
- 若 \(x<a_{i}\le y\),令 \(y=a_{i}\)
- 若 \(a_{i}>y\),令 \(x=a_{i}\)
证明考虑 \(a_{i}\) 最多在前后各造成 \(1\) 的代价,能不在前面付出代价就不要付出。\(x\) 一定时 \(y\) 越大越好
时间复杂度 \(O(n)\)
D. 01 Tree
显然父亲相同的叶子到根的距离差 \(1\),且父亲到根的距离为儿子中距离较小的那个。赛时一直在想根据 dfs 序构造
考虑剥叶子。问题转化为若 \(a[i]=a[i-1]+1\) 或 \(a[i]=a[i+1]+1\) 则可以删去 \(a[i]\),问能否删至只剩 \(0\)。每次尝试删最大值就行了
可以做到 \(O(n)\)
edu152(div2)
\(+174=2049\)
B 没细看数据范围 WA 了一次
D 没判 \(i-1=0\) WA 了一次
E. Max to the Right of Min
考虑增大右端点,维护每个左端点的合法性
当右端点从 \(r-1\) 增大到 \(r\) 时,
- 若 \(a[r-1]<a[r]\):\(r\) 只能作为区间最大值。记上一个 \(>a[r]\) 的位置是 \(p\),那么 \(i\in(p,r],[i,r]\) 的最大值是 \(r\),一定合法。对于 \(i\le p\),最值都不是 \(r\),合法性不变
- 若 \(a[r-1]>a[r]\):\(r\) 只能作为区间最小值。同理
数据结构维护合法的左端点,支持插入/删除末尾一个区间。使用栈可以做到 \(O(n)\)
F. XOR Partition
套路题,不应该不会做
赛时想法是分裂 trie(单 log)
标算是每次把异或最小的一对数分开,用二分图划分两个集合,发现这个过程就是 xor mst(双 log)