测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A46333. 求逆序对数对于一个长度为N的整数序列A,满足i < j 且 Ai > Aj.的数对(i,j)称为整数序列A的一个逆序请求出整数序列A的所有逆序对个数输入输入包含多组测试数据,每组测试数据有两行 第一行为整数N(1 <= N <= 20000),当输入0时结束 第二行为N个整数,表示长为N的整数序列输出每组数据对应一行,输出逆序对的个数样例输入51 2 3 4 555 4 3 2 1110样例输出…

填空题 困难

题目描述

求逆序对数

对于一个长度为N的整数序列A,满足i < j 且 Ai > Aj.的数对(i,j)称为整数序列A的一个逆序

请求出整数序列A的所有逆序对个数

输入

输入包含多组测试数据,每组测试数据有两行 第一行为整数N(1 <= N <= 20000),当输入0时结束 第二行为N个整数,表示长为N的整数序列

输出

每组数据对应一行,输出逆序对的个数

样例输入

5

1 2 3 4 5

5

5 4 3 2 1

1

1

0

样例输出

0

10

0

参考答案

#include <iostream> #include <algorithm> #include <map> #include <string> #include <cstring> using namespace std; int main() { int m; cin >> m; while (m != 0) { int a[20005] = { 0 }; for (int i = 0; i < m; i++) { cin >> a[i]; } int count = 0; for (int i = 1; i < m; i++) { for (int j = m - 1; j >= i; j--) { if (a[j] < a[j - 1]) { count++; int t = a[j]; a[j] = a[j - 1]; a[j - 1] = t; } } } cout << count << endl; cin >> m; } return 0; }
上一题 下一题