1 条题解
-
0
乘法排序 题解
思路
最终数组严格递增,因此所有负数一定构成一个前缀,所有正数构成一个后缀。枚举负数前缀的长度 。
在负数前缀内,若相邻原数满足 ,给它们乘同一个负数后顺序已经正确;否则必须在这两个位置之间产生一次额外的区间操作边界。在正数后缀内则相反: 时无需额外操作, 时必须增加一次边界。只要 ,还需要一次操作把整个前缀变为负数。任意大的整数乘数可以从边界向外依次选择,因此这些必要条件也足够。
所以固定 的代价为
$$[k>0]+\#\{i<k:a_i\le a_{i+1}\}+\#\{i\ge k:a_i\ge a_{i+1}\},$$其中相邻下标按分界两侧理解,不统计跨越正负分界的相邻对。
做法
子任务 1 枚举分界,再枚举所有相邻位置是否由不同操作块覆盖,检查所有必要边界并取最少操作数。
子任务 2 枚举分界 ,每次从头扫描负前缀与正后缀,直接计算上式。
完整做法先预处理每个后缀中的非递增相邻对数量。分界从左向右移动时,再维护负前缀中的非递减相邻对数量,每个分界即可 求值。
复杂度
子任务 1 的时间复杂度为 ,空间复杂度为 。
子任务 2 的时间复杂度为 ,空间复杂度为 。
完整做法的时间复杂度为 ,空间复杂度为 ;所有复杂度均对单组数据而言。
- 1
信息
- ID
- 1158
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者