51nod 1019 逆序数 (归并排序)
来源:互联网 发布:淘宝下架时间规则 编辑:程序博客网 时间:2024/06/06 00:00
归并排序的复杂度是n*log(n)和快排的差不多。每次要去排序的是前半部分和后半部分,前半部分是排好序的,后半部分也是排好序的。当左边的子序列出现一个数大于右边的子序列的时候,左边子序列末尾数的位置减去当前左边这个数的位置加1就得到了有多少逆序对了
#include <bits\stdc++.h>using namespace std;const int maxn=5e4+7;int ans=0;void mergesort(int *a,int*tmp,int l,int r){ if(l>=r)return; int mid=(r+l)/2; mergesort(a,tmp,l,mid); mergesort(a,tmp,mid+1,r); for(int i=l;i<=r;i++)tmp[i]=a[i]; int i1=l,i2=mid+1; for(int i=l;i<=r;i++) { if(i1>mid)a[i]=tmp[i2++]; else if(i2>r||tmp[i1]<=tmp[i2])a[i]=tmp[i1++]; else ans+=mid-i1+1,a[i]=tmp[i2++]; } //cout<<ans<<" "<<l<<" "<<r<<endl;}int a[maxn],b[maxn];int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); mergesort(a,b,1,n); cout<<ans<<endl; return 0;}
阅读全文
0 0
- 51nod 1019 逆序数(归并排序)
- 归并排序 51nod 1019 逆序数
- 51nod 1019 逆序数 归并排序求逆序数
- 51nod 1019 逆序数 (归并排序)
- 【51nod】1019 逆序数(归并)
- 51 nod 1019 逆序数【归并排序||树状数组】
- 51nod - 1019 逆序数(归并排序or线段树)
- 51nod:1019 逆序数(树状数组|归并排序|vector)
- 51nod 1019 逆序数 (归并|树状数组)
- 51NOD-归并-逆序数
- 51Nod 1019 逆序数(归并法求逆序数)
- 51NOD1019 逆序数(归并排序)
- 51Nod 1019 逆序数(树状数组/归并)
- 【51 nod 1019 】 逆序对 【归并排序】or【线段树】
- 归并排序,逆序数
- 归并排序 逆序数
- 归并排序+逆序数
- 归并排序 + 逆序数
- AsyncTask,在studio中会用到子节流转换字符串
- FM1702 13.56MHz RF PCB天线调试经验记录
- 【叉积性质】POJ 2318 TOYS && POJ 2398 Toy Storage
- 二维码扫描
- 进程间通讯——信号量(一)
- 51nod 1019 逆序数 (归并排序)
- 单词,紫书P169UVa10129(有向图求欧拉路径问题,并查集求连通分支)
- 句子的逆序 -- 算法小结
- 【AC梦工厂】广工华工联合训练6 K
- PAT乙级1064. 朋友数(20)
- SpringMVC中的/*和/的区别
- 移动端设计布局
- 51nod 1254 最大子段和 V2
- error='Cannot allocate memory'