线段树内二分一定要注意先左后右。。。不要同时


A. Reverse

题解:

只能倒置一次,所以贪心的从头开始遍历数组。如果当前元素之后有更小的,则在此处倒置。数据范围只有500,枚举每个倒置情况取字典序最小的即可。复杂度O(t*n2)。

B. Odd Swap Sort

题解:

可以发现有贪心的顺序,即每次把当前最小的元素放置到最左边,类似于冒泡。但由于加和为奇数才能移动,所以若之前出现过奇偶性相同的较大元素,则移动失败。因此建立一个优先队列(小根堆)保存以下当前最小元素,遍历数组操作即可。

C. Inversion Graph

题解:

逆序对连边问题。顺序遍历,发现若存在i<j<kai>aj>ak,则aj与ai连边后即无用了。因为后面与位置j形成逆序关系的位置都可以与i形成逆序,从而与位置j相关。因此维护一个单调递增的a数列即可,每次向前找最靠前位置的逆序关系,再修改a数列使其缩短并将该最靠前位置的a权值改为寻找过程中最大的a值即可。答案为最终a数列的长度。

D. Big Brush

题解:

模拟题。发现最终一定是涂色一个2*2矩阵,因此不妨倒着涂色,每次对已涂色区域的边缘做dfs。发现有如下四种可涂色情况:

  1. 2*2矩阵最终颜色相同
  2. 2*2矩阵有3处最终颜色相同,剩下的一处已被涂色(注意:此处已涂色指涂色顺序)
  3. 2*2矩阵有2处最终颜色相同,其余两处已被涂色(同上)
  4. 2*2矩阵中有3处已被涂色(同上)

另外的,要注意2*2矩阵的选取又可以以当前dfs位置分别为左上、右上、左下、右下的4种情况。分类讨论以下既可通过。

E. Colorful Operations

题解:

数据结构题。区间修改单点查询,就是线段树模板的修改版。总体上,可以设置一个数组bi表示当前颜色i的操作2更改权值代数和,每次操作1对树上节点权值进行 +b[当前颜色]-b[修改颜色] 即可,这样对应的操作3答案即为线段树上对应叶子节点权值 +b[该位置颜色] 。我们将连续的颜色相同片段视为整体,对于每个操作1,最多额外产生两个“整体”。对于其合并整体的情况,我们发现每个整体自产生后只能被合并一次。所以我们对“整体”的操作是线性的。因此对于操作1,我们顺序按整体操作即可(即区间修改颜色和树上节点权值),这里用到线段树内二分,线段树外二分会多一个log从而超时。


版权声明:本文为vermouth_1412原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/vermouth_1412/article/details/122951383