首页 > 逆序数
头像 19_hanhan
发表于 2020-05-30 22:28:18
题目 题目描述: 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。 一个排列中逆序的总数就称为这个排列的逆序数。比如一个序列为4 5 1 3 2。 那么这个序列的逆序数为7,逆序对分别为(4, 1), (4, 3), (4, 2 展开全文
头像 精神病科黄主任
发表于 2020-05-21 17:59:50
树状数组模板题、归并也行 树状数组,先查询树状数组内当前有多少个数比当前的数字大,然后再把数字更新上去即可。。 #include<bits/stdc++.h> using namespace std; int c[1<<17]; int n; void add(int x){ 展开全文
头像 sunrise__sunrise
发表于 2020-05-27 20:05:15
归并排序 直接在归并排序改一个地方就行了,就是a[x]>a[y]的时候,多一步计数即可。也可以采取树状数组查询之前比你大的数出现几个,数据较小可以不离散处理,大一点可以离散。 #pragma GCC target("avx,sse2,sse3,sse4,popcnt") #pragma GC 展开全文
头像 18duangduang
发表于 2020-05-29 16:29:45
树状数组简单应用,逆序数转换为:求前i个数小于x的和。 #include<bits/stdc++.h> #define lowbit(x) x&(-x) using namespace std; typedef long long ll; const int maxn=2e5+ 展开全文
头像 ThinkofBlank
发表于 2020-05-19 16:11:22
逆序对模板题/x(怎么又是模板题啊) 题目大意: 给你一个长度为n的序列,求逆序对数 直接上归并排序。。。才怪。。。 作为一个热衷于权值线段树的菜鸡,当然直接上权值线段树辣! 只需要实现insert()添加一个数和find()查询值的范围属于查询区间的数字的个数 这两个基本函数就行。 代码: #in 展开全文
头像 HGDB
发表于 2020-05-29 15:02:52
思路 这题可以用树状数组做个数组![图片说明](https://www.nowcoder.com/equation?tex=c_%7Bi%7D "图片标题") 表示元素 i 是否存在,为1表示存在 第i个元素X的逆序对个数就是在i前面的数并且比i大,即 c[x] ~ c[n]位置为1的个数 树状数 展开全文
头像 微澜尛雨
发表于 2022-03-16 17:44:18
题目考点:归并排序、二维偏序都可以写,也都是模板题 题目大意:给定一个数组,对于数组中的每一个数ai,如果前面有一个数aj大于ai,那么(aj,ai)组成一组逆序对,数组中逆序数的个数为数组的逆序数,求逆序数的数量。 思考:既然有不少同学写了归并排序,我就写一写二维偏序吧!思路很简单,我们把 展开全文
头像 luo想要个气球
发表于 2020-05-21 20:42:37
#include <cstdio> using namespace std; const int N = 1e5+10; const int inf = 1e5; typedef long long ll; int tree[N]; int n; int lowbit(int x){ 展开全文
头像 天才制杖
发表于 2023-07-23 16:35:41
最容易理解的方法 为什么要用递归呢? 直接每个数和他后面的依次比较就完了 注意!!!高能!!! 返回值一定要是long long不然装不下,会错误!!这个问题想了好久 "> long long fun(int *a,int N) { int n=0,t=a[0]; for(in 展开全文
头像 Bernard5
发表于 2020-05-21 21:08:16
归并排序做法 什么是归并排序呢?用一张图来说明: (本图引用自浙江大学数据结构MOOC) 归并排序可以理解为:将两个有序的序列合并成一个有序的序列。我们递归地执行,直到区间分割到单个元素,然后再递归回去,去执行有序序列的合并,就完成了归并排序。 当出现a[x] > a[y]的情况时,出现逆序 展开全文