题目链接
题目思路:归并排序的典型题
熟练运用归并排序
代码实现
#include<bits/stdc++.h> using namespace std; const int Max=1e5+5; int a[Max],b[Max]; long long sum=0; void _merge(int left,int right) { if(left>=right) return; int mid=left+(right-left)/2,l=left,r=mid+1; _merge(left,mid); _merge(mid+1,right); for(int i=left;i<=right;i++) { if((a[l]<a[r]&&l<=mid)||r>right) { b[i]=a[l]; l++; } else { b[i]=a[r]; sum+=(mid-l+1); r++; } } for(int i=left;i<=right;i++) a[i]=b[i]; } void merge_sort(int n) { _merge(0,n-1); } int main() { int n; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; merge_sort(n); cout<<sum<<endl; }