這題用樹狀數組比歸并排序快很多啊~~~
一個是500多一個2000多。
這題用樹狀數組,主要有兩點
I.離散化,把n個數映射到1-n里面,不然內存不夠,
II.求一個數組的某一個數據的前面所有數據中比它小(或大)的所有數的個數
對于第一個,我們可以用一個struct,然后里面存兩個信息,一個是val,一個是no,其中val是輸入的數,no是用來離散化的。
對于第二個,很多人說是樹狀數組的基本功了,但是我覺得看怎么結束樹狀數組的。在這里你可以對每一個數update(a[i],1),然后再getsum(a[i])(a[i]是離散化后的數組)。這樣的話,你再用i - getsum(a[i])就是逆序數的對數了,如果不好理解的話,可以用5 2 1 4 3這個數組來模擬下。
對于這兩個問題解決了之后,這題就簡單了
下面給出代碼(還是建議自己先想,不過離散化沒接觸的,可能會比較難想,樹狀數組還行吧)

CODE