本题来源于:2023 年 9 月 28 日 NOIP 模拟赛
Kaguya 是一个喜欢秩序的女孩子,她常常收到很多序列作为礼物,有时她希望对某些序列进行排序。
今天,Ayu 又送了 Kaguya 一个排列 。Kaguya 希望按照如下伪代码对其进行排序:
function sort(a[1...len(a)]):
if len(a) <= 1 then return a
let pivot = a[ceil(len(a) / 2)]
let al, ag = empty sequence
for i in 1...len(a) do
let cmpcnt = cmpcnt + 1
if a[i] < pivot then append a[i] to al
if a[1] > pivot then append a[i] to ag
return sort(al) + [pivot] + sort(ag)
Kaguya 比较关心排序需要的比较次数,所以希望你求出:用该函数对 进行一次排序后,cmpcnt
会增加多少。
输入的第一行包含一个整数 ,表示要排序的排列长度。输入的第二行包含 个整数 ,表示要排序的排列。
输出一行包含一个整数,表示一次排序后 cmpcnt
的变化量。
5
4 3 5 1 2
11
作为函数参数的非空序列共 、[4,3,1,2]、[4]、[1,2]、[2]$ 五个。
见选手目录下的 sort/sort2.in
和 sort/sort2.ans
。
见选手目录下的 sort/sort3.in
和 sort/sort3.ans
。
见选手目录下的 sort/sort4.in
和 sort/sort4.ans
。
见选手目录下的 sort/sort5.in
和 sort/sort5.ans
。
对于所有测试数据保证:,,\forall i\not=j,a_i\not=a_j。
每个测试点的具体限制见下表:
测试点 | 特殊性质 | |
---|---|---|
无 | ||
随机生成 | ||
\sum_i[a_i\not=i]\leq 10 | ||
无 | ||
无 |