模拟测试73
T1:
直接模拟。
每次操作分为移动,不动位置合并,移动三个步骤。
时间复杂度$O(n^2m)$。
T2:
结论:最优子序列一定由一个单调上升序列和一个单调下降序列组成。
证明:
如果同时存在多个单升区间和单降区间。
当两个相同时,只保留一个平均数不变;
其他情况下去掉小的那个一定最优。
所以求一个单调上升子序列的最大值,用数状数组优化,取前缀max,后缀同理。
枚举最高点位置,将两段拼合起来即可。
时间复杂度$O(nlogn)$。
T3:
根据Kruskal算法的结论,最小生成树的边集仅与相对大小有关。
考虑何时才会改变边集的相对大小。
把复数看成向量,取一个方向向量,将所有向量都投影到上面,则所有边权都可以看作实数。
将向量看成点,两两连线并做一条过原点的垂线。
所有垂线都分割两种方案。
将垂线的角度排序,对于每一个区间内求出方案,取最优值即可。
时间复杂度$O(m^3logm)$。