博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod - 1019 逆序数(归并排序or线段树)
阅读量:7238 次
发布时间:2019-06-29

本文共 1238 字,大约阅读时间需要 4 分钟。

思路:利用归并排序,先分解区间。最后合并区间的时候找到逆序的个数。(可以画图来理解归并排序)
代码:
1 #include 
2 #include
3 using namespace std; 4 5 int a[50005]; 6 int res[50005]; 7 int ans; 8 9 void merge(int l,int r){10 //cout<
<<" "<
<
>1;12 int i = l,j = mid+1;13 int cur = l;14 while(i <= mid && j <= r){15 if(a[i] <= a[j])16 res[cur++] = a[i++];17 else{18 res[cur++] = a[j++];19 ans += mid-i+1; //找到逆序的个数20 }21 }22 while(i <= mid) res[cur++] = a[i++];23 while(j <= r) res[cur++] = a[j++];24 for(int i = l;i <= r;i ++) a[i] = res[i];25 }26 void mer_sort(int l,int r){27 if(l < r){28 int mid = (l+r)>>1;29 mer_sort(l,mid); //分解30 mer_sort(mid+1,r); //分解31 merge(l,r); //合并32 }33 }34 int main()35 {36 int n;37 while(cin>>n){38 for(int i = 1;i <= n;i ++) cin>>a[i];39 40 ans = 0;41 mer_sort(1,n);42 cout<
<
View Code

 

 

转载于:https://www.cnblogs.com/Jstyle-continue/p/6351934.html

你可能感兴趣的文章
数位DP
查看>>
PLSQL Convert Object to String
查看>>
Linux 串口驱动设计二
查看>>
jQuery方法判断checkbox是否选中以及改变checkbox的选中状态
查看>>
CSS样式设置小技巧
查看>>
PDF 补丁丁 0.4.2.1063 测试版发布:新增检查新版本功能
查看>>
Module的加载实现
查看>>
统计学 学习第一季第一集《统计学习方法》第一章 统计学方法概论 简要概述...
查看>>
Ubuntu 安装jdk与tomcat
查看>>
css学习_css补充知识
查看>>
python 08day--软件包的管理及ssh、samba、apache服务
查看>>
ThinkPPHP学习(一)生成图片验证码
查看>>
*Algs4-1.5.19动画-(感觉不正确)
查看>>
git 合并分支
查看>>
hdu 1098 Ignatius's puzz
查看>>
KFC ajax
查看>>
学长哈哈的店公告
查看>>
python 读取 xlsx
查看>>
ethereum/EIPs-1271 smart contract
查看>>
Football
查看>>