求逆序对数
题目内容:对于一个长度为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;
}