考慮一下逆序數的定義:數字
{ 2, 4, 3, 1 }
分別是(2,1), (4,3), (4,1), (3,1)
也就是說針對一個數。判斷在這個序列中這個數位置後面的數有多少個比它小。
也就是說針對一個數。判斷在這個序列中這個數位置以前有多少個數比它大。
那就是詢問當前數~n 區間上的出現了多少個數。 (因爲咱們詢問順序是從前到後(左到右)。因此在當前數前面且比它大的都更新過了。)
注意這裏把極端列爲n。 若是不是n就要離散化。
知道逆序數。求原排列。
從小到大開始肯定。
好比說。 4的逆序爲3。
按照逆序數的等價說法。
在序列中 4 這個數字位置以前有3個數比4大。
那咱們初始化線段樹。葉子節點爲1。其他節點爲區間和。
從左到右 查到 當前空位( 1爲空位。 0爲非空。)
其中更新時候 把第當前數的空位置清爲0。非空便可。