题目描述:
对于一个序列 A1,A2,A3,…,An−1,An,如果存在正整数 i,j 使得 1≤i<j≤n 而且 Ai>Aj, 则 (Ai,Aj) 这一对被称为 A 序列的一个逆序对,现给出序列 A,请求出其中逆序对的总对数。
输入格式:
第一行, 仅一个整数 n
第二行, 有n个数字, 第 i 个数字表示 Ai ,各个数字之间以一个空格隔开
输出格式:
仅一个整数, 表示所求逆序对数
样例输入:
4 3 2 4 1
样例输出:
4
提示:
对于50%的数据有1≤n≤500
对于100%的数据有1≤n≤1,000,0≤A[i]≤1,000
样例解释:
总共有4对,分别是第一个数3和第二个数2,第一个数3和第四个数1,第二个数2和第四个数1,第三个数4和第四个数1。
时间限制: 1000ms
空间限制: 256MB
这题的数据比较小,枚举所有可能即可,放心不会超时(最多1000²)。
#include <bits/stdc++.h>
using namespace std;
int i,a,b,c;
int main() {
cin>>a;
int s[a+1];
for(i=1; i<=a; i++) cin>>s[i]; //输入
for(i=1; i<=a; i++) for(b=a; b>=i; b--) if(s[b]<s[i]) c++; //枚举逆序对的数量
cout<<c;
return 0;
}