洛谷【P1908】逆序对
题目传送门:https://www.luogu.org/problemnew/show/P1908
所谓逆序对,就是序列中\(a[i]>a[j]\)且\(i<j\)的有序对。
所以我们在归并排序的时候可以顺便把这个玩意儿的个数求了。
如果你不知道归并排序是啥,那么就去看看这个:
https://www.cnblogs.com/AKMer/p/9645807.html
如果\(a[pos1]>a[pos2]\),那么\([pos1,mid]\)都将比\(a[pos2]\)大,就会产生\(mid-pos1+1\)对逆序对。
区间内部的逆序对我们在递归的时候已经统计完了,所以我们只需要会统计第一个数在\([l,mid]\),第二个数在\([mid+1,r]\)中的逆序对就可以了。
时间复杂度:\(O(nlogn)\)
空间复杂度:\(O(n)\)
代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
#define ll long long
const int maxn=5e5+5;
int n;
ll ans;
int a[maxn],p[maxn];
int read() {
    int x=0,f=1;char ch=getchar();
    for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
    for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
    return x*f;
}
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 pos1=l,pos2=mid+1,pos=l;
	while(pos1<=mid&&pos2<=r) {
		if(a[pos1]<=a[pos2])p[pos++]=a[pos1++];
		else p[pos++]=a[pos2++],ans+=mid-pos1+1;//统计答案
	}
	while(pos1<=mid)p[pos++]=a[pos1++];
	while(pos2<=r)p[pos++]=a[pos2++];
	for(int i=l;i<=r;i++)a[i]=p[i];
}
int main() {
    n=read();
    for(int i=1;i<=n;i++)
        a[i]=read();
    merge_sort(1,n);
	printf("%lld\n",ans);
    return 0;
}
												
											洛谷【P1908】逆序对的更多相关文章
- 洛谷P1908 逆序对
		
P1908 逆序对 2.2K通过 4.4K提交 题目提供者该用户不存在 标签云端 难度普及/提高- 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨论 归并排序党注意了!数组要开… ...
 - 洛谷P1908 逆序对【递归】
		
题目:https://www.luogu.org/problemnew/show/P1908 题意:给定一个数组,求逆序对个数. 思路: 是一个很经典的题目了.通过归并排序可以求逆序对个数. 现在有一 ...
 - 洛谷  P1908 逆序对 Label:归并排序||树状数组 不懂
		
题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定 ...
 - 洛谷 P1908 逆序对
		
\[传送门qwq\] 题目描述 猫猫\(TOM\)和小老鼠\(JERRY\)最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计. 最近,\(TOM\)老猫查阅 ...
 - 洛谷P1908 逆序对 [权值线段树]
		
题目传送门 逆序对 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为“逆序对”的 ...
 - 洛谷—— P1908 逆序对
		
https://www.luogu.org/problem/show?pid=1908 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏, ...
 - 洛谷 P1908 逆序对(归并排序解法)
		
树状数组解法:https://www.cnblogs.com/lipeiyi520/p/10846927.html 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不 ...
 - 洛谷 P1908 逆序对(树状数组解法)
		
归并排序解法:https://www.cnblogs.com/lipeiyi520/p/10356882.html 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不 ...
 - 洛谷P1908 逆序对(归并排序)
		
题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定 ...
 - 洛谷 P1908 逆序对 题解
		
每日一题 day43 打卡 Analysis 因为数据规模,所以我们需要对其进行离散化,新创一个数组a里面来放在我们的初始序列中在这个位置上的数是第几大的这里还要用一个小技巧排序,关于离散化的技巧我们 ...
 
随机推荐
- Web框架的引入
			
为什么会有web框架 有了上一篇内容,静态.动态web服务器的实现,已经掌握了客户端请求到服务器处理的机制.在动态资源处理中,根据请求 .py 导入模块应用,然后调用应用入口程序实现动态处理.但是在真 ...
 - 开关openCV
			
#include <cv.h> #include <highgui.h> #include <stdio.h> //开关 ; void switch_callbac ...
 - 九度OJ 1189:还是约瑟夫环 (约瑟夫环)
			
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:820 解决:522 题目描述: 生成一个长度为21的数组,依次存入1到21: 建立一个长度为21的单向链表,将上述数组中的数字依次存入链表每 ...
 - Django 动态导入配置文件的类
			
导入配置文件的类 #如何用字符串的形式动态导入模块 from importlib import import_module path=''api.cors.CORSMiddleware' #CORSM ...
 - 我的Java开发学习之旅------>Java 格式化类(java.util.Formatter)基本用法
			
本文参考: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html http://www.blogjava.net/ ...
 - Django利用form进行显示
			
form的显示部分主要分为2部分:1.统一显示(表单里的所有字段): a.{{form.as_table}} b.{{form.as_p}}2.显示部分字段: {{ field.label_tag } ...
 - linux 4 -awk
			
十一. awk编程: 1. 变量: 在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义.变量的类型可以是数字.字符串.根据使用的不同,未初始化变量的值为0或空白字符串&q ...
 - STM32 ~ J-LINK V8 修复
			
1.1 安装固件烧录软件 ♦请ATMEL官方网址下载AT91-ISP下载软件. 软件下载地址:http://www.atmel.com/dyn/products/tools_card.asp?t ...
 - iOS   __weak 和 __block 的使用探讨
			
在基本的开发中遇到 需要弱引用时候 我一般 用 weak 预防 死锁的时候 我会用 block 的确没出过大错 但是这样处理 的确有点囫囵 现在我想好好理解一下这两个修饰符 "bloc ...
 - 每天一个Linux命令(14)head命令
			
head命令用于显示文件的开头的内容.在默认情况下,head命令显示文件的头10行内容. 如果指定了多于一个文件,在每一段输出前会给出文件名作为文件头. 如果不指定文件,或者文件为"- ...