冒泡计数器升级版(Bubble Plus)

题目背景

杨乐多发现:冒泡排序之所以 稳定 ,是因为它只在 aj>aj+1a_j > a_{j + 1} 时才交换,因此相等元素的相对顺序不会改变。
当序列里出现重复值时,最终的有序序列其实是 稳定升序 (相同数字按原出现顺序排列)。

杨乐多想研究一个更贴近真实冒泡排序的问题:优化冒泡排序会在第几轮停止?

题目描述

给定一个长度为 nn 的整数序列 a1,a2,,ana_1,a_2,\dots,a_n(这里不保证是排列,允许重复)。

运行如下 优化冒泡排序(下标从 11 开始):

for i = 1..n:
    swapped = false
    for j = 1..n-i:
        if a[j] > a[j+1]:
            swap(a[j], a[j+1])
            swapped = true
    if swapped == false:
        print(i)
        break

请输出程序最终打印的数字(也就是外层循环执行到第几轮停止)。

输入格式

  • 第一行一个整数 nn
  • 第二行 nn 个整数 a1,a2,,ana_1,a_2,\dots,a_n

输出格式

输出一个整数,表示优化冒泡排序停止时的轮数。

输入输出样例

样例输入 1

3
2 1 1

样例输出 1

2

样例解释 1

稳定升序结果为 [1,1,2][1,1,2]

  • 11 轮会发生交换并得到 [1,1,2][1,1,2]
  • 22 轮无交换,输出 22

样例输入 2

5
3 3 2 2 1

样例输出 2

5

数据范围与提示

对于 100%100\% 的数据,保证 1n2×105,ai1091 \le n \le 2\times 10^5, |a_{i}| \le 10^9

测试点编号 nn \le ai\mid a_{i} \mid \le
1101 \sim 10 10310^3
111511 \sim 15 5×1035 \times 10^3 10610^6
162016 \sim 20 2×1052 \times 10^5 10910^9

相关

在下列比赛中:

「果壳杯」 ROUND 34 (Div. 4)