「考试」省选62

好难啊。
改的也好难。

T1
联赛题。
我们发现\(k\)次冒泡排序之后,一个元素最多向左走\(k\)步。
那么对于\(\forall i\in[1,k+1]\)维护\(a[i]\)的最小值。
那么排序后的\(a'[1]\)为这段的最小值。
然后维护\([1,k+2]\)的,这些的最小值是\(a'[2]\)的值。
以此类推。

T2
想到了用行列式。
但是还是不会维护。
我们发现只需要求这样一个满足条件的矩阵:

\[\forall i,j\in[L_i,R_i],a_{i,j}=1 \]

的行列式。
如果是正数那么我们就赢了。
0的话平局。
负数就是魔鬼赢了。
那么暴力的求是\(n^3logn\)的。
我们利用这个矩阵的特殊性质用线段树合并来维护一下。
按照右端点排序。
每一行找到\(r\)最小的且当前位为\(i\)的行。
然后交换行。
消除的时候,把一行的所有信息都转移到\(R_i+1\)处去。
这样做一次是\(O(nlog^2n)\)的。

T3
多项式题。
我们把大于\(10000\)的所有数都统一统计,发现他们的代价全都是关于\(gcd(\{A_i\})\)循环的。
那么我们求出这个多项式关于\(gcd\)的循环卷积快速幂:\((px+100-p)^n\)即可统计了。
然后小于\(10000\)的部分去掉统一统计时候的答案,然后暴力背包算出来这一部分的贡献即可。

posted @ 2020-04-04 20:20  Lrefrain  阅读(126)  评论(0编辑  收藏  举报