标签:mergeSort begin 排列 end int mid ++ 1237 序数
题解可参考 归并排序。
严肃声明:并没有水博客,归并排序是归并排序,分治是分治!
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 }
标签:mergeSort,begin,排列,end,int,mid,++,1237,序数 来源: https://www.cnblogs.com/sxrekord/p/find_the_reverse_order_of_the_permutation.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。