codevs 1688 逆序对
来源:互联网 发布:php培训 编辑:程序博客网 时间:2024/04/30 20:09
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold
题目描述 Description
给定一个序列a1,a2,…,an,如果存在i并且ai>aj,那么我们称之为逆序对,求逆序对的数目
数据范围:N<=105。Ai<=105。时间限制为1s。
输入描述 Input Description
第一行为n,表示序列长度,接下来的n行,第i+1行表示序列中的第i个数。
输出描述 Output Description
所有逆序对总数.
样例输入 Sample Input
4
3
2
3
2
样例输出 Sample Output
3
#include<iostream>#include<cstdio>using namespace std;int a[100011],zh[100011];unsigned long long k;void mergesoft(int left,int right) { if(left==right) return; int mid=(left+right)/2; mergesoft(left,mid); mergesoft(mid+1,right); int p=left,q=left,j=mid+1; while(p<=mid && j<=right) { if(a[p]>a[j]) {k=k+mid-p+1;zh[q++]=a[j++];} //若a[p]>a[j],而且我们用分治早已排成升序形式,//得出a[p]到mid之间所有数都会大于a[j],所以k=k+mid-p+1, +1补充我们减去的a[p] else zh[q++]=a[p++]; } while(p<=mid) zh[q++]=a[p++]; while(j<=right) zh[q++]=a[j++]; for(int i=left;i<=right;i++) a[i]=zh[i];}int main(){ int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; mergesoft(1,n); cout<<k; return 0;}
0 0
- codevs 1688 逆序对
- Codevs 1688 求逆序对
- codevs.1688 求逆序对
- 归并排序求逆序对 CODEVS 1688 && NOIP 2013 火柴排队
- [NOIP模拟][dp][codevs]p1401逆序对统计
- 20160325 Codevs 2924 挑战数独,2806 红与黑,4163 hzwer与逆序对
- 逆序数 & 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- php 贪婪算法(摘记)
- ViewPager加载页面,底部圆点指示器,圆点拖动效果,支持手势拖动
- R语言案例分析:多元数据的基本统计分析
- 动态规划算法
- PAT甲级1005
- codevs 1688 逆序对
- (shell)判断文件个数是否为一,是的话判断是否在文件内
- Java过滤器与SpringMVC拦截器
- 算法导论——2.1-4
- spark 操作hive相关文档以及技术操作网址链接
- Django开发环境搭建 mac
- Android Handler详解--理论篇
- LeetCode 51. N-Queens
- IOS NSTask(重启设备、杀指定进程)