2022.10.24 ZRnoip20连day9

1.时间安排

8:30~9:40

先看了看题,T1数据结构,T2构造,T3状压,T4数论,还比较常规。

T1数据范围放到了1e6,非常恐怖。50分暴力很好写,就决定先把T1搞出来。

容易想到选择操作的数对一定是逆序对,一般处理这种是从小到大加入维护,但是这题右端点的值是区间内有多少数比右端点小,查询右端点的最大值,这东西不太可做。

想了很久也没什么合理的做法,先打了50分,再打了个暴力维护试试能不能过随机数据,也跑不动。

开T2。

9:40~10:30

感觉一眼冒泡排序,但是求稳先写了爆搜,发现n=10根本跑不动,剪枝也不行,就想冲正解试试。

浅证了一下如果无解按照冒泡排序的方式交换一定能判出来,问题就在于可能把有解判无解,没太想到合理的处理方式,不过似乎那样的数据很难构造,出题人大概不会卡太死(反正没子任务),写了个冒泡排序。

(结果真混了80分)

10:30~10:45

感觉T3不可做,打了20分阶乘暴力跑路。

10:45~11:20

T4阶乘暴力很简单,但是就10分不想写,发现只有m对相邻的点对,直接状压相邻点对选择情况,选择了就连边,dfs一遍找链,因为题目限制不可能连出来不是链的东西,然后用二项式定理容斥就做出来30分。

11:20~13:00

冲T1,什么也没写出来(后面摆了)。

result:

T1:50 T2:80 T3:20 T4:30

2.收获

T1:

很妙的数据结构题,正解真的是单log的。

操作的是逆序对这点不够强,可以发现一定是前缀最大值和后缀最小值,因为如果当前边界不是区间最大值一定不优。

考虑不作为边界的点就是被数的对象,考虑这个点被那些区间数了。

前缀最大值一定是连续的,所以当前点被数的区间也是连续的,直接二分出来左边界和右边界,后缀最小值同理。

典型的二维数点矩形加,本题是全局最大值,扫描线维护即可。

数据结构+性质分析,不是特别擅长性质分析的题,还是见的少。

T2:

先排序前n-2位,一定能完成,最后可能会出现n, n-1无法操作的现象。

一个结论是一个排列交换相邻数对后逆序对数奇偶性一定变化,升序排列逆序对数是偶,所以出现这种情况一定无解。

排列上这个结论可以直接用,非排列考虑人为规定偏序,值相同比较下标。

但是非排列并不一定说出现上述情况一定无解,我们可以交换一对值相同的数在排列中的值,相当于改变了排列逆序对数奇偶性,就避免了有解判成无解了。

当然找不到这样的一对数就必然无解。

很妙的构造,也学到了新的关于逆序对数的结论。

T3:

先判总和<0一定无解,>=0总能找到合法出发点。

如果已经知道行驶路线,考虑怎么求出最小合法的出发点。把路线从1开始画成折线图,那么最小合法出发点就是最左边的最低点,很容易证明。

以这点为分界线,前面的值必须大于0,后面的值必须大于等于0(根据上面的结论)。

\(f_s\) 表示当前选的路径集合是s,和小于0的方案数,\(g_s\) 则是和大于等于0的方案数,答案就是 \(\sum_{s}f_s*g_{C_us}*|s|\)

被排列计数吓到了,实际上是简单状压DP题。

T4:

离谱数学题,题解太长就不在这里赘述了。

学到新技能:分块打表。

比如要求 1e9 级别的阶乘时,可以打出来B个块,每个块是这个块左端点到右端点的累乘值,那么可以做到 \(O(n/B)\) 查询,但是限于代码长度 \(B\) 不能太大,具体因题目而异。

这个操作当然也可以拓展到其他的地方,比如欧拉函数等等。

优点是很容易实现,且常数很小。

缺点就是要打出来这份表,如果是1e10……还是想正解吧。

posted @ 2022-10-24 21:30  Displace  阅读(31)  评论(0)    收藏  举报