正在载入在线练习界面,本页内容可直接阅读…
AK CSP › CSP-S 2026 第一轮真题 › 第 14 题
CSP-S 2026 第一轮 第 14 题:若把判断条件中的 a[i] <= a[j] 改成 a[i] < a[j]
题目
用归并排序统计逆序对,合并部分的核心代码为:
若把判断条件中的 a[i] <= a[j] 改成 a[i] < a[j],则 ans 统计出的结果( )。
// 分并 a[l..mid] 与 a[mid+1..r],同时累加逆序对
if (a[i] <= a[j]) {
tmp[k++] = a[i++]; // 取左半段元素
} else {
tmp[k++] = a[j++]; // 取右半段元素
ans += mid - i + 1;
}选项
- A. 完全不变
- B. 变为原来的两倍
- C. 变为满足 $i < j$ 且 $a[i] \ge a[j]$ 的数对个数
- D. 变为原来的一半
答案
C
题解
选 C。
归并时,左右两段都已经有序:
- 原条件为
a[i] <= a[j]:只有当a[i] > a[j]时才进入else,统计的是严格逆序对。 - 改成
a[i] < a[j]:当a[i] >= a[j]时就会进入else,因此相等的元素也会被统计。
进入 else 时,左半段剩余的元素都满足 \[ a[i],a[i+1],\ldots,a[mid]\ge a[j], \] 所以 ans += mid - i + 1 正好统计这些数对。左半段元素的原始下标都小于右半段元素的原始下标,因此最终统计的是 原数组中满足 \(i<j\) 且 \(a[i]\ge a[j]\) 的数对个数。
例如数组 [2, 2],原来统计结果为 0,修改后为 1。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号