[SDOI2015]排序

这篇博客探讨了排序问题,特别是长度为2和4的交换方式对排序的影响。博主提出,只要一个从小到大的合法操作序列存在,就有相应操作顺序的组合也是合法的。通过将序列按2l分段,确保段首是2l倍数且相邻元素满足特定条件,来判断是否能进行长度为l的交换。当无法交换的区间超过2个时,解决方案失败。博主采用分治策略,每次最多扩展两种分支,以解决排序问题,算法的时间效率充足。
摘要由CSDN通过智能技术生成

一、题目

点此看题

二、解法

首先考虑操作顺序对答案的影响:

举个例子:1 2 3 4 5 6 7 8,现在有长度 2 2 2 4 4 4的两种交换方式。

第一种方案,先用 2 2 2:5 6 3 4 1 2 7 8,再用 4 4 4:1 2 7 8 5 6 3 4

第二种方案,先用 4 4 4:5 6 7 8 1 2 3 4,再用 2 2 2:1 2 7 8 5 6 3 4

不难发现只要一个从小到大(指影响的长度),个数为 x x x的操作序列合法,那么有与之对应的 x ! x! x!种不考虑顺序的操作方法均能合法。这个结论应该是很容易理解的,这给我们一个启发:我们操作顺序只需要从小到大地考虑。

假如当前我们需要使用 l l l长度的交换,那么我们必须要解决以后不能解决的问题,因为长度是越来越大的。我们可以按 2 l 2l 2l把原序列分段,每个段内需要保证段首是 2 l 2l 2l的倍数并且 a [ t ] + l = a [ t + l ] a[t]+l=a[t+l] a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值