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

CODE