CF2400 乱做
CF1832F
进行一个平凡的转化,求人和电网的交的最大值。
因为电网的长度都相等,所以事实上是要求人和电网的中点离得尽量进,也就是说将人按照中点排序,每个电网的作用范围是一段区间。
设 \(f_{i,j}\) 是 \(i\) 个电网控制前 \(j\) 个人,发现 \(f_{i,j}=\max\limits_{k=1}^j f_{i-1,k-1}+g_{k,j}\),其中 \(g_{k,j}\) 是 \([k,j]\) 的人与一个电网的交的最大值。
先考虑怎么算 \(g_{i,j}\),首先本质有用的电网左端点只有 \(l_i,r_i-m\),发现右边少一个人电网只可能向左,左边少一个人电网只可能向右,决策点有单调性,\(h_{i,j-1}\le h_{i,j}\le h_{i+1,j}\),加上前缀和优化为 \(O(n^2)\),注意因为有多个相等的位置,所以 \(h_{i,i}\) 可能大于 \(h_{i+1,i+1}\),边界需要特判一下。
再算 \(f_{i,j}\),发现这个形式也非常像有单调性的样子,不可能把大量的电网挤在一起,所以 \(h_{i,j-1} \le h_{i,j}\le h_{i+1,j}\),时间复杂度 \(O(n^2)\)。
CF1838F
先考虑这么一种情况:
>>>>v
v<<<<
>>>>v
v<<<<
如果答案是 \(-1\),那么可以二分找到不合法的位置,如果答案不是 \((5,1)\),那么可以确定唯一位置。
否则进行第二轮测试:
>>>>^
^<<<<
>>>>^
^<<<<
如果答案是 \(-1\),仍然二分找到不合法位置,否则答案一定是 \((4,1,v)\)。
CF1830F
设 \(f_i\) 表示考虑到 \(i\) 的时候答案的最大值,这个答案是不算 \(a_i\) 的贡献的,因为 \(a_i\) 的贡献与下一个数 \(j\) 有关。
那么 \(f_j=f_i+a_i\times g_{i,j}\),其中 \(g_{i,j}\) 是满足 \(l\le i\le r<j\) 的区间的数量,发现 \(g_{i,j}\) 对于每一个 \(i\) 来说单调不降,所以可以用 LCT 维护。
由于有后缀加减,需要打 tag,为了防止一条直线跨过两个不同区间,修改前要把这条直线递归下去。又因为这次打 tag 对以前的线段没有影响,所以要把以前的线段的 \(b\) 减去 \(k\times tag\)。
边界要特判,防止越界。复杂度 \(O(n\log^2 m+m\log m)\)。
CF1830E
考虑找到特征值快速算出需要排序多少次。
一次排序相当于把两个数交换,我们知道,通常排序都和逆序对有关系,所以假设 \(j-i=k\),那么逆序对减少了 \(2k-1\) 个。
再发现一次排序的 \(j\) 不可能往后,只会继续往前,所以假设 \(j-i=k\),那么 \(\sum\limits_{i=1}^n |i-a_i|\) 减少了 \(2k\)。
每次排序会导致两者的差 \(-1\),所以排序的次数就是两者的差。
\(O(n\log^2 n)\) 求动态逆序对即可。
CF633G
把树拍平,线段树 + bitset 维护答案,时间复杂度 \(O(\frac{nm\log n}{w})\),空间被卡常可以分块。
CF461D
发现确定了第一行那么剩下的也就确定了,启发我们找第一行有多少方案,发现每一个位置相当于钦定第一行的一个连续段的异或和。经典用并查集维护连通块,看是否合法,最后答案就是 \(2^{num-2}\)。
本文来自博客园,作者:mikefeng,转载请注明原文链接:https://www.cnblogs.com/mikefeng/p/17475770.html

浙公网安备 33010602011771号