這題是看樹狀數組是看到的,博客作者說這個可以用歸并排序,于是就寫了下,發現還好。

對于數組a,歸并排序時的合并階段,分成兩段,也就是(start,mid)和(mid,end)(我這里第一段的下標是從start到mid-1,
第二段的下標是從mid到end-1)。用三個下標分別指向前面一段(i),后面一段(j),和新數組下標(idx).那么當出現
num[j] < num[i]的時候,結果就應該加前面一段還沒有進入新數組的數據的長度,比如說當前i = 3;j = 8;mid = 5且
num[8] < num[3];那么結果應該加上(5-3=2)(記住我的前面一段是到mid-1結束),因為在這次歸并的過程中要移動(5-3=2)次,
因為(num[3],num[8])是一個逆序對,同時(num[4],num[8])是一個逆序對(似乎這里理解起來有點困難-_-,可以畫一個圖,
自己手動執行下,比如第一個樣例就行(9,1,0,5,4),自己手動執行下,就知道為什么了)。那么這樣的話應該就好做了,
最后一點就是結果會超int用long long或者__int64存
代碼如下(依舊,建議讀者先自己寫)
CODE