IOI赛制,fjj的模拟赛,题目质量非常高(准确来说是非常适合我们),fjj强大的%%%
赛时看T1,然后打了60暴力,已经知道用组合数来求了,然后也知道固定左上角的来求答案,但是就是没想明白怎么去除重复的贡献
然后一看榜,wc,lmy怎么25分钟就切了
时间过了一会,然后一看,wc,大家怎么全切了
直接红温了😡,一怒之下,我去了一趟厕所,然后一闻到那个味,我就清醒起来了
然后我就对着厕所的墙壁,理了一下思路,然后从最简单的情况考虑,先考虑两个,再扩展到3个,然后就会做了
切了还剩1h30min
然后看T3,想到直接贪心没前途,所以考虑用一个 \(a_i\) 来选区间能选则选,然后缩小区间的范围
这在 \(a_i\) 相同时会错,但是考虑只会有相邻的才有这个问题
我先打了一个错的暴力,但是多测没清,然后60->16
考虑用堆来维护两边有依赖关系的贡献,然后若一边不能选了,那另一边一定被缩进去了
均摊O(n)
然后可以用线段树来维护一个寻找一个区间所交的编号最小的区间,然后做就完了
非常麻烦
T2考虑这类排列计数问题
考虑用一个排列状态加入一个数会对序列造成什么影响,然后进行统计答案
一般拍到二维平面上,然后扫描线
连续段dp
考虑一个状态来记录一下,接下来连续段的情况
然后搞一个状态考虑加入一个数然后会对状态造成什么影响,然后进行dp转移即可
记录一下当前露出来的有j个连续段,每次的贡献就是 \((a_{i-1}-a_i)*2*j\)
注意以下左右边界,因为不好判断,所以给他记录到状态里