逆序数和线段树的关系

考虑一下逆序数的定义:数字

{ 2, 4, 3, 1 } 

分别是(2,1), (4,3), (4,1), (3,1)

也就是说针对一个数。判断在这个序列中这个数位置后面的数有多少个比它小。

也就是说针对一个数。判断在这个序列中这个数位置以前有多少个数比它大。

 

那就是询问当前数~n 区间上的出现了多少个数。 (因为咱们询问顺序是从前到后(左到右)。因此在当前数前面且比它大的都更新过了。)

注意这里把极端列为n。 若是不是n就要离散化。

 

知道逆序数。求原排列。

 

从小到大开始肯定。

好比说。 4的逆序为3。

按照逆序数的等价说法。

在序列中 4 这个数字位置以前有3个数比4大。

那咱们初始化线段树。叶子节点为1。其他节点为区间和。

从左到右 查到 当前空位( 1为空位。 0为非空。)

其中更新时候 把第当前数的空位置清为0。非空便可。

相关文章
相关标签/搜索