Codeforces Round #771 A-E题解报告

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


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从而超时。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hiroxzwang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值