输出逆序数
来源:互联网 发布:hold the door知乎 编辑:程序博客网 时间:2024/05/18 03:39
#include <bits/stdc++.h>#include<algorithm>using namespace std;int a[100010];int b[100010];void Merge(int a[],int s,int m,int e,int tmp[]){int pb=0;int p1=s,p2=m+1;while(p1<=m&&p2<=e){if(a[p1]>a[p2]) tmp[pb++]=a[p1++];else tmp[pb++]=a[p2++]; }while(p1<=m) tmp[pb++]=a[p1++];while(p2<=e) tmp[pb++]=a[p2++]; for(int i=0;i<e-s+1;i++) a[s+i]=tmp[i];}long long Count(int a[],int s,int m,int e){long long result=0;int p1=s,p2=m+1;while(p1<=m&&p2<=e){if(a[p1]>a[p2]){result+=e-p2+1;++p1;}else ++p2;}return result;}long long MergeSort(int a[],int s,int e,int tmp[]){ long long result=0;if(s<e){int m=s+(e-s)/2;result+=MergeSort(a,s,m,tmp);result+=MergeSort(a,m+1,e,tmp);result+=Count(a,s,m,e);Merge(a,s,m,e,tmp);//从大到小合并,确保排序 }return result;}int main(){int n;cin>>n;for(int i=0;i<n;++i) cin>>a[i]; printf("%lld",MergeSort(a,0,n-1,b)); return 0;}
阅读全文
0 0
- 输出逆序数
- 输出逆序数
- 任意数的逆序输出
- 输入几个数逆序输出
- 十个数逆序输出--数组应用
- 【算法】二进制数的逆序输出
- java实现:将一个数逆序输出
- 输出逆序后的数组元数
- 逆序输入数的二进制序列输出
- 逆序输出
- 逆序输出
- 逆序输出
- 逆序输出
- 逆序输出
- 逆序输出
- 逆序输出
- 逆序输出
- 逆序输出
- Linux下的常用替换命令
- Java并发之神修炼之路---创建多线程的三种方式
- Android常用系统广播
- Java中那些不得不说的坑
- 实战Java高并发程序设计(二)Java并行程序基础
- 输出逆序数
- 初学html
- 工厂方法模式
- maven创建父子结构工程
- C语言关于static的解析
- 数据库基础知识点(2)
- Spark面试经典系列之数据倾斜解决方案的“银弹”是什么? 本节我们对Spark数据倾斜解决方案进行回顾和总结
- 设计模式(二十三)interpreter
- 【2-SAT】hihoCoder#1467 音乐节