求逆序对有很多方法,比如说用合并排序、分治、树状数组、线段树,甚至连暴力(冒泡排序)也可以做,但是要注意会不会超时。 这里就讲一下树状数组的方法,这一题最有意思的是离散化的方法,这个方法在处理大数据的排序方面很有用,离散化能够有效的降低时空复杂度,他可以改进一个低效的算法。除了加上了一个离散化,其他的用树状数组就可以解决
poj--2299(树状数组+离散化) 一、离散化: https://www.cnblogs.com/2018zxy/p/10104393.html 二、逆序数 AC代码: View Code View Code
hdu 4605(树状数组+离散化) 题意:一棵树上每个节点都有权值,一个球从根节点往下走,每个球都有一个权值x,如果x大于当前节点的权值w[i],有1/8的概率走左边孩子节点,有7/8的概率走右边孩子节点,如果x等于当前节点的权值w[i]或者当前节点是叶子节点,则球停止下落,如果x小于当前节点的权值,各1/2的概率走左右...
用笔写写就好了。 离散之后,怎么使用离散后的结果数组来进行树状数组操作,计算出逆序数? 如果数据不是很大,可以一个个插入到树状数组中,每插入一个数,统计比他小的数的个数,对应的逆序为 i- getsum(aa [i]),其中i为当前已经插入的数的个数,getsum(aa[i])为比aa[i]小的数的个数,i- sum(aa[i]) ...
1. 离散化 + 权值线段树/权值树状数组2. CDQ 分治 算法1: 离散化+权值线段树 维护区间信息的线段树,例如区间和,区间最大/最小值,也叫区间线段树。 权值线段树维护元素值的计数,节点的位置代表元素值,节点的值代表元素的数量,其中叶子节点代表特定元素的数量,非叶子节点代表一个取值范围的元素的数量。 每来一个新...
第一步,初始化一个全0的、数组长度为4的树状数组类 (zero-indexed) 第二步,在树状数组的位置 2 加上1 (因为2是[1,0,2]的最后一个) 第三步,在树状数组的位置 0 加上1 (此处其实省略了 query) 第四步,在树状数组的位置 1 加上1,并计算(query)树状数组位置 1 之前的和(这个和是1),这个和就是数...
分类:POJ_OJ解题报告数据结构__线段树|树状数组2012-11-1515:06169人阅读评论(0)收藏举报 链链接:接: http://poj/problem?id=2528 题目大意:题目大意: 在长度为10000000的墙上贴海报,海报的高度和墙的高度一样,不同的海报覆盖在不同的区域。如 果有重叠位置,则后面贴的海报会把之前贴的海报覆盖掉。问最终有...
在之前关于树状数组的笔记中,我提到过离散化,但其实那时我所用的方法并不是很合理,因为它会把序列中相同的数映射为不同的排名。而实际上,离散化可以用STL较简单地完成。 例如,现在我们有序列A=[10, 23, 35, 3, -40, 3]。我们先复制一个同样的序列: int C[MAXN]; memcpy(C, A, sizeof(A)); 排序...
树状数组主要用来求解前缀和、区间和、逆序对、区间和的个数和相关求个数的问题等等问题,最重要的是要考虑怎么将题目给的信息转化为一个前缀和,这一点是比较难想到的。 模板 int[]tr;intn;publicintlowbit(inti){returni&-i;}publicvoidadd(inti,intk){for(;i<=n;i+=lowbit(i))tr[i]+=k;}publicint...
树状数组_逆序数_离散化 Gitfan关注IP属地: 广东 2017.03.15 13:04:34字数20阅读400 http://poj.org/problem?id=2299 http://blog.csdn.net/suwei19870312/article/details/5293694 #include <cstdio> #include<algorithm> #include <stdlib.h> #include<string.h> #define maxn 500005 using namespace ...