POJ_2299 Ultra-QuickSort【归并排序】
2024-08-29 04:27:33
版权声明:本文为博主原创文章,未经博主同意不得转载。
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;
}
最新文章
- .Net语言 APP开发平台——Smobiler学习日志:如何在手机上开发仪表盘控件
- Loadrunner监控Linux系统资源
- Windows Phone Sliding Effect
- WebSocket///////////////////////z
- Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十三】
- linux笔记:linux常用命令-目录和文件处理命令
- JazzyViewPager开源项目的简析及使用
- LeetCode_Regular Expression Matching
- 自定义HTTP错误页太小,导致显示默认友好错误页问题
- [翻译]如何编写GIMP插件(一)
- XAMPP 虚拟主机配置,实现多域名访问本地项目
- [NOI导刊2010提高]黑匣子
- Linux环境变量与文件查找
- tp框架中的一些疑点知识-7
- Python全栈开发-有趣的小程序
- JavaScript 操作DOM对象
- 对Inductive Bias(归纳偏置)的理解
- 左连接LEFT JOIN 连接自己时的查询结果测试
- solr介绍一:Analyzer(分析器)、Tokenizer(分词器)
- hdu 4779 Tower Defense (思维+组合数学)