题目描述 Description
猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i<j的有序对。知道这概念后,他们就比赛谁先算出给定的一段正整数序列中逆序对的数目。

 输入输出格式 Input/output
输入格式:
第一行,一个数n,表示序列中有n个数。
第二行n个数,表示给定的序列。
输出格式:
给定序列中逆序对的数目。

 输入输出样例 Sample input/output
样例测试点#1
输入样例:

6
5 4 2 6 3 1

输出样例:
11

 说明 description
对于50%的数据,n≤2500
对于100%的数据,n≤40000。
分析:传统方法是树状数组,但是蒟蒻打起来比较困难,于是直接上归并排序。在合并的时候记录一下逆序对个数就好了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
int n,a[40001],h[40001],ans;
int read() //读入优化。
{char c=getchar();int a=0;while (c<'0'||c>'9') c=getchar();while (c>='0'&&c<='9') {a=a*10+c-'0';c=getchar();}return a;
}
void merge_sort(int l,int r)
{if (l==r) return;int mid=(l+r)>>1;merge_sort(l,mid);merge_sort(mid+1,r);int left=l,right=mid+1;for (int i=l;i<=r;i++)if ((a[left]<a[right]||right>r)&&left<=mid){h[i]=a[left];left++;}else{h[i]=a[right];right++;ans+=(mid-left+1); //记录逆序对个数}for (int i=l;i<=r;i++) a[i]=h[i];
}
int main()
{n=read();for (int i=1;i<=n;i++) a[i]=read();merge_sort(1,n);printf("%d",ans);return 0;
}    

转载于:https://www.cnblogs.com/ws-fqk/p/4470794.html

[洛谷P1908] 逆序对|归并排序|树状数组相关推荐

  1. 洛谷 P1908 逆序对(树状数组+离散化)

    题目描述 猫猫 TOM 和小老鼠 JERRY 最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计. 最近,TOM 老猫查阅到一个人类称之为"逆序对& ...

  2. 信息学奥赛一本通 1311:【例2.5】求逆序对 | 1237:求排列的逆序数 | OpenJudge NOI 2.4 7622:求排列的逆序数 | 洛谷 P1908 逆序对

    [题目链接] ybt 1311:[例2.5]求逆序对 ybt 1237:求排列的逆序数 OpenJudge NOI 2.4 7622:求排列的逆序数 洛谷 P1908 逆序对 ybt 1311,123 ...

  3. 洛谷P1908求逆序对【树状数组】

    逆序对 逆序对的定义:对于给定的一段正整数序列,逆序对就是序列中 ai>aj,i<ja_i>a_j,i<jai​>aj​,i<j,让统计逆序对的个数. 本题的数据加 ...

  4. P3157 动态逆序对 ,树状数组套动态开点线段树

    题目 洛谷题目链接 题解 在求整体的逆序对的数量时,很好办,直接用树状数组处理即可,不过在这时,我们还需要处理出一个数组pa[]pa[]pa[],其中pa[i]pa[i]pa[i]代表在区间[1,i) ...

  5. 洛谷P3374 【模板】树状数组 1

    题目链接:[模板]树状数组 1 - 洛谷 模板题就不多说了 ac代码: #include <cstdio> #include <iostream> #include <a ...

  6. hdu 4911 求逆序对数+树状数组

    http://acm.hdu.edu.cn/showproblem.php?pid=4911 给定一个序列,有k次机会交换相邻两个位置的数,问说最后序列的逆序对数最少为多少. 实际上每交换一次能且只能 ...

  7. 【模板】逆序对(树状数组)

    逆序对在编程中比较常见,最普通的O(n ^ 2)算法很短,但是太慢了,往往不满足我们的要求.一种高级的O(nlogn)的算法是使用归并排序,在归并排序执行过程中解决问题,时间是短,但是代码量太大了.现 ...

  8. 洛谷P3688/uoj#291. [ZJOI2017]树状数组

    传送门(uoj) 传送门(洛谷) 这里是题解以及我的卡常数历程 话说后面那几组数据莫不是lxl出的这么毒 首先不难发现这个东西把查询前缀和变成了查询后缀和,结果就是查了\([l-1,r-1]\)的区间 ...

  9. 洛谷P2448 无尽的生命 树状数组

    给出231−12^{31}-1231−1范围的1−n1-n1−n的数列,然后有不超过k≤1e5k\leq1e5k≤1e5次交换,求问最终的逆序对的个数是多少. 被交换的值不超过2k2k2k个,然后再考 ...

最新文章

  1. 安装MySQL出现的this application
  2. 数据挖掘和机器学习:基本概念和算法(附电子书PPT)
  3. python多线程没用_为什么我无法在python中加入该线程?
  4. java标点符号用什么意思_java怎么统计字符串内的标点符号?
  5. shell 数学运算
  6. mysql 凭证_如何用mysql验证flask/python中的凭证?
  7. node --- 创建一个Socket服务器
  8. 《Office 365开发入门指南》上市说明和读者服务
  9. 美国防部DARPA发起地下空间挑战赛提供3百万美元巨奖
  10. virtualbox display size
  11. map和foreach的区别和应用场景_说说session和cookie区别与主要应用场景,localStorage的特点...
  12. HTML+CSS制作Windows启动加载动画
  13. 如何将手机轻松投屏电脑?
  14. [Hive]Hive表文件压缩介绍
  15. Merge k Sorted Lists
  16. 【纯干货】中国的支付清算体系是怎么玩的?
  17. “应版权方要求,文件无法下载”的解决方案
  18. vue3警告[Vue warn]: Extraneous non-emits event listeners (getVal) were passed to component but could n
  19. 情人节脱单必备,程序员如何花式表白?
  20. speedoffice使用方法-Word怎么在方框里面打对勾

热门文章

  1. qt widget设置边框_Qt开源作品16-通用无边框拖动拉伸
  2. 导致溢出_邯郸一司机,溢出的“5毫克”导致A2被降级,老司机自吞“苦酒”
  3. 监测到本计算机上装有sql,检测局域网电脑是否有安装SQL Server数据库
  4. python爬虫面试自我介绍范文_走过路过不容错过,Python爬虫面试总结
  5. 架构设计文档规范文档
  6. 2017年3月计算机二级c语言真题,2017年3月计算机二级C语言习题及答案
  7. java 注解scheduler_JAVA注解@Scheduled 不执行
  8. STM8单片机 ADC模拟看门狗中文资料错误
  9. 如何设置STM8单片机选项字
  10. Focal Loss 分类问题 pytorch实现代码(续1)