#992. 波浪排序

波浪排序

题目背景

小佳喜欢给数组排序。可惜他还不会高级排序算法。他心爱的冒泡排序玩腻了,于是他发明了一种排序,由于一交一替的很像波浪,便称它为“波浪排序”。他想知道给一个数组进行“波浪排序”需要多少次操作。

问题描述

给你一个长为 nn 的数组 a1,2,...,na_{1,2,...,n},进行若干回合操作将其排成升序。

对于每回合的操作:

  • 第一步,对于每个奇数下标 ii,将 aia_iai+1a_{i+1} 排序,也就是说,如果 ai>ai+1a_i > a_{i+1} ,则交换 aia_iai+1a_{i+1}
  • 第二步,对于每个偶数下标 ii,将 aia_iai+1a_{i+1} 排序,同上。

对于i=n即i+1>n的,你应当忽略并不进行操作。

求总共(最少)需要的交换次数。

输入格式

共输入两行。

第一行一个正整数 nn ,表示数组元素个数。

第二行连续输入 nn 个正整数 aia_i

输出格式

一行一个正整数,表示“波浪排序”该数组需要的交换次数。

样例输入#1

5
2 4 1 3 5

样例输出#1

3

样例输入#2

5
1 2 3 4 5

样例输出#2

0

说明

对于第一组样例,

第一回合,第一步比较 (a1=2,a2=4),2<4(a_1=2,a_2=4),2<4 ,不交换,比较 (a3=1,a4=3),1<3(a_3=1,a_4=3),1<3,不交换;第二步比较 (a2=4,a3=1),4>1(a_2=4,a_3=1),4>1,交换,比较 (a4=3,a5=5),3<5(a_4=3,a_5=5),3<5 ,不交换。序列变为 2 1 4 3 52\ 1\ 4\ 3\ 5

第二回合,第一步比较 (a1=2,a2=1),2>1(a_1=2,a_2=1),2>1 ,交换,比较 (a3=4,a4=3),4>3(a_3=4,a_4=3),4>3 , 交换;序列变为 1 2 3 4 51\ 2\ 3\ 4\ 5 已经有序了。

总操作次数为 33

对于第二组样例,序列已经有序,故为 00

评测数据规模

测试点 nn\le 特殊性质
11 1010 没有重复的aia_i
242-4 10410^4
55 2×1052\times10^5 保证数组已经是升序
66 5×1045\times 10^4 保证数组随机
787-8
99 2×1052\times10^5 保证没有重复的aia_i
1010
  • 对于所有测试数据,保证 n2×105n\le 2\times10^51ai1091\le a_i\le10^9