版权声明:本文为博主原创文章,未经博主同意不得转载。

https://blog.csdn.net/u013912596/article/details/35655703

题目链接:http://poj.org/problem?id=2299

题目大意:求出排序过程中的最小交换次数

利用归并排序的分治算法解决此题。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#define N 500001
using namespace std;
int a[N];
int temp[N];
long long ans;
void merge(int *a,int start,int mid,int end,int *temp)
{
int ai=start;
int bi=mid+1;
int k=0;
while (ai<=mid&&bi<=end)
{
if(a[ai]<=a[bi])
temp[k++]=a[ai++];
else
{
temp[k++]=a[bi++];
ans+=(mid-ai+1);
}
}
while (ai<=mid)
temp[k++]=a[ai++];
while (bi<=end)
temp[k++]=a[bi++];
for(int i=0;i<=end-start;i++)
{
a[start+i]=temp[i];
}
}
void merge_array(int *a,int start,int end)
{
if(start<end)
{
int mid=(start+end)/2;
merge_array(a,start,mid);
merge_array(a,mid+1,end);
merge(a,start,mid,end,temp);
}
}
int main()
{
int n;
scanf("%d",&n);
while(n)
{
memset(a,0,sizeof(a));
ans=0;
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
merge_array(a,0,n-1);
printf("%I64d\n",ans);
scanf("%d",&n);
}
return 0;
}

最新文章

  1. .Net语言 APP开发平台——Smobiler学习日志:如何在手机上开发仪表盘控件
  2. Loadrunner监控Linux系统资源
  3. Windows Phone Sliding Effect
  4. WebSocket///////////////////////z
  5. Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十三】
  6. linux笔记:linux常用命令-目录和文件处理命令
  7. JazzyViewPager开源项目的简析及使用
  8. LeetCode_Regular Expression Matching
  9. 自定义HTTP错误页太小,导致显示默认友好错误页问题
  10. [翻译]如何编写GIMP插件(一)
  11. XAMPP 虚拟主机配置,实现多域名访问本地项目
  12. [NOI导刊2010提高]黑匣子
  13. Linux环境变量与文件查找
  14. tp框架中的一些疑点知识-7
  15. Python全栈开发-有趣的小程序
  16. JavaScript 操作DOM对象
  17. 对Inductive Bias(归纳偏置)的理解
  18. 左连接LEFT JOIN 连接自己时的查询结果测试
  19. solr介绍一:Analyzer(分析器)、Tokenizer(分词器)
  20. hdu 4779 Tower Defense (思维+组合数学)

热门文章

  1. create view
  2. JavaScript 对象的使用
  3. 全源最短路径 - floyd算法 - O(N ^ 3)
  4. h5请求跨域问题Access-Control-Allow-Origin解决跨域
  5. vue上传文件
  6. chrome plugins
  7. Laravel中不可逆的加密方法
  8. PHP:第三章——PHP中的递归函数
  9. TClientDataSet的FileName属性
  10. 玩转X-CTR100 l STM32F4 l HMC5983/HMC5883L三轴磁力计传感器