首页 > 其他 > 详细

1237:求排列的逆序数

时间:2021-08-12 13:34:03      阅读:66      评论:0      收藏:0      [点我收藏+]

求排列的逆序数

题解可参考 归并排序

严肃声明:并没有水博客,归并排序是归并排序,分治是分治!

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 const int N=1e5+5;
 6 int a[N];
 7 long long ans;
 8 //归并排序
 9 void mergeSort(int begin,int end){
10     //递归终止条件
11     if(begin==end)return;
12 
13     int mid=(begin+end)/2,t[N];
14     mergeSort(begin,mid);
15     mergeSort(mid+1,end);
16     int x=begin,y=mid+1,r=begin;
17     while(x<=mid&&y<=end){
18         if(a[x]>a[y]){
19             //核心算法
20             ans+=mid-x+1;
21             t[r++]=a[y++];
22         }else{
23             t[r++]=a[x++];
24         }
25     }
26     while(x<=mid){
27         t[r++]=a[x++];
28     }
29     while(y<=end){
30         t[r++]=a[y++];
31     }
32     //复制数组
33     while(--r>=begin){
34         a[r]=t[r];
35     }
36 }
37 int main(){
38     cin>>a[0];
39     for(int i=1;i<=a[0];i++)cin>>a[i];
40     mergeSort(1,a[0]);
41     cout<<ans;
42     return 0;
43 }

 

1237:求排列的逆序数

原文:https://www.cnblogs.com/sxrekord/p/find_the_reverse_order_of_the_permutation.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!