這題是看樹狀數(shù)組是看到的,博客作者說這個可以用歸并排序,于是就寫了下,發(fā)現(xiàn)還好。

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