#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
vector<int> num;
int answer;
vector<int> Merge(vector<int> ,vector<int> );
vector<int> msort(vector<int> a)
{
int len=a.size();
if (len==1) return a;
int mid=len/2;
vector<int> al,ar;
for (int i=0;i<mid;i++) al.push_back(a[i]);
for (int i=mid;i<len;i++) ar.push_back(a[i]);
al=msort(al);
ar=msort(ar);
return Merge(al,ar);
}
vector<int> Merge(vector<int> a,vector<int> b)
{
vector<int> ans;
ans.clear();
int n=a.size();
int m=b.size();
int p_a=0;
int p_b=0;
while (p_a<n && p_b<m) {
if (a[p_a]<=b[p_b]) {
ans.push_back(a[p_a]);
p_a++;
answer+=p_b;
}
else {
ans.push_back(b[p_b]);
p_b++;
}
}
if (p_a<n) {
for (int i=p_a;i<n;i++) ans.push_back(a[i]);
answer+=(n-p_a)*m;
}
if (p_b<m) {
for (int i=p_b;i<m;i++) ans.push_back(b[i]);
}
return ans;
}
int main()
{
int n,ls;
cin>>n;
for (int i=1;i<=n;i++) {
cin>>ls;
num.push_back(ls);
}
msort(num);
cout<<answer<<endl;
return 0;
}
用vector实现逆序对数量统计和归并排序
最新推荐文章于 2023-05-11 23:34:41 发布