题目描述】
给定一个序列a1,a2,…,ana1,a2,…,an,如果存在i<ji<j并且ai>ajai>aj,那么我们称之为逆序对,求逆序对的数目。
【输入】
第一行为nn,表示序列长度,接下来的nn行,第i+1i+1行表示序列中的第ii个数。
【输出】
所有逆序对总数。
【输入样例】
4 3 2 3 2
【输出样例】
3
复制代码到粘帖板 #include<stdio.h> int temp[100000]; int a[100000]; long long ass = 0; void guibing2(int low, int mid, int high) { int i, j, p; for (i = low, j = mid, p = low; i < mid && j <= high; p++) { if (a[i] <= a[j]) { temp[p] = a[i++]; } else { temp[p] = a[j++]; ass += mid - i; } } while (i < mid) { temp[p++] = a[i++]; } while (j <= high) { temp[p++] = a[j++]; } for (i = low; i <= high; i++) { a[i] = temp[i]; } } void guibing1(int low, int high) { if (high > low) { int mid = (high + low) / 2; guibing1(low, mid); guibing1(mid + 1, high); guibing2(low, mid+1, high); } } int main() { int n; scanf("%d", &n); int i; for (i = 1; i <= n; i++) { scanf("%d", &a[i]); } guibing1(1, n); printf("%lld\n", ass); return 0; }
8.求逆序对数目----归并排序
于 2022-01-23 21:12:08 首次发布