模拟测试73

T1:

  直接模拟。

  每次操作分为移动,不动位置合并,移动三个步骤。

  时间复杂度$O(n^2m)$。

T2:

  结论:最优子序列一定由一个单调上升序列和一个单调下降序列组成。

  证明:

    如果同时存在多个单升区间和单降区间。

    当两个相同时,只保留一个平均数不变;

    其他情况下去掉小的那个一定最优。

  所以求一个单调上升子序列的最大值,用数状数组优化,取前缀max,后缀同理。

  枚举最高点位置,将两段拼合起来即可。

  时间复杂度$O(nlogn)$。

T3:

  根据Kruskal算法的结论,最小生成树的边集仅与相对大小有关。

  考虑何时才会改变边集的相对大小。

  把复数看成向量,取一个方向向量,将所有向量都投影到上面,则所有边权都可以看作实数。

  将向量看成点,两两连线并做一条过原点的垂线。

  所有垂线都分割两种方案。

  将垂线的角度排序,对于每一个区间内求出方案,取最优值即可。

  时间复杂度$O(m^3logm)$。

posted @ 2019-10-15 17:04  hz_Rockstar  阅读(170)  评论(0编辑  收藏  举报