欢喜白开水

文章
4
资源
0
加入时间
3年0月9天

_树状数组_1. 什么是树状数组?2. l o w b i t lowbit lowbit3. 一

1. 什么是树状数组?树状数组是一个查询和修改复杂度都为 O⁡(log⁡n)\operatorname{O}(\log n)O(logn) 的数据结构。看到这句话是不是想到了线段树?是的!但是,凡是可以使用树状数组解决的问题, 使用线段树一定可以解决, 但是线段树能够解决的问题树状数组未必能够解决。哦,那还是用线段树吧……然鹅:线段树的数组需要开 444 倍,树状数组只用 111 倍。树状数组代码量少,线段树写 111 题用树状数组可以写 222 题。真不错!2. low

POJ2299 Ultra-QuickSort【树状数组】【逆序数】

题目大意:给你一个包含N个整数的序列,只能通过交换相邻的数字,最终变为升序顺序,问:最少需要多少次交换。思路:其实就是问冒泡排序的交换次数。其实就是求原序列的逆序数。用归并排序、线段树、树状数组都可以做。但是如果用线段树和树状数组来做的话,因为元素个数是500000,但是元素值范围却是999999999,需要先离散化。这里用间接排序的方法。用一个数组Arr[]存放原序列的值,另一个数组Id[]存放原序列编号(1~N),对Id[]按Arr[]元素值的从大到小排序,得到Arr[]数组元素的相对大小