20250812
总结
今天写了一套高考英语模拟卷(除了作文和七选五),晚上(7点之后)写了高一物理习题2个小节,对了答案
英语耗时1h 13min(30+23+20),物理耗时1h
习题
P2541
总用时:1h 21min
- 思路历程:先考虑暴力,给n个序列先排序,再维护小根堆。后面就不会了
- 题解:进行优化,通过手推样例,发现每个状态都可能由几个不同的状态入堆,所以只需要优化前驱就能解决时间问题
规定每个状态只能由最后一行前一个数的状态转移,如果无法选择,则从下往上找第一个可行行即可
收获:
多手推数据可以找到方法
CF1924B
总用时:2h 03min
- 思路历程:想直接用线段树维护,初始非常简单,只需要维护前面和后面的港口相乘就行,
对于增加港口的操作,可以把港口左右分开,算一个新的距离,乘一个权重商(w2/w1),维护区间加和区间乘,注意一下精度问题就行了,卡卡常就过了 - 题解:和我的思路一样
P4587
总用时:2h 07min(思考花费1h+,调代码用了挺久,因为主席树某个神秘参数mid + 1变成了mid)
- 思路历程:先考虑暴力:对于每次询问,把[l, r]区间暴力排序,从左往右扫,设当前可以表示的数为[1, x],若a[i] > x + 1,答案就出来了,否则[1, x + a[i]], 继续。
考虑优化,继续刚才的思路,可以惊奇地发现,如果小于ans的数的和>=ans,那么肯定由没有被选的<=ans的数
直接用主席树维护 - 题解:第一篇题解就是这么写的,和我的一样
P7706
总用时:1h+
- 思路历程:考虑使用线段树,对于每一个节点,都维护该区间最优解,考虑如何更新
问题转换为求Max{Aa - Bb}, Max{Ac - Bb}
接下来就得到了转移方式:tr[cur] = max{tr[cur << 1], tr[cur << 1 | 1], Max{a[i]} - Min{b[i]}}
只需要一个一个合并起来维护,直接查询就行了 - 题解:大部分都是线段树解法
CF2000H
这个题没搞完