逆序對的求法(樹狀陣列)

2021-08-07 04:38:21 字數 611 閱讀 5525

設a[1...n]是乙個包含n個不同數的陣列,如果在ia[j],則(i,j)就稱為a中的乙個逆序對。

求法有兩種,一種是歸併排序,一種是樹狀陣列。二者的時間複雜度都是o(n*logn),但樹狀陣列更加好寫。

思路:開乙個樹狀陣列a記錄每乙個數出現的次數。倒序輸入,每輸入乙個數num就在a中加1,同時求一下從0到num-1的字首和。

#include using namespace std;

void addnum(int * arr, int iarrsize, int iindex, int inum)

int getsum(int * arr, int iindex)

int main()

, arrnum[1010] = ;

cin >> inumtot;

int ians = 0;

for (int i = 1; i <= inumtot; i++)

cin >> arrnum[i];

for (int i = inumtot; i >= 1; i--)

cout << ians << endl;

return 0;

}

樹狀陣列求逆序對

題目描述 給定乙個陣列a,它包含n個整數,分別是a 1 a 2 a n 如果存在下標i和j,使得 i j 且 a i a j 同時成立,則 i,j 就為乙個 逆序對 那麼a陣列總共有多少對不同的 逆序對 輸入格式 1247.in 第一行為n 1 n 100000 接下來是n行,每行乙個長整型範圍內的...

樹狀陣列求逆序對

很久以前就學了樹狀陣列,也知道可以用來求逆序對,然而一直沒弄明白他是怎麼實現的 可能當時沒搞清楚逆序對是什麼吧。逆序對就是如果i j a i a j 這兩個就算一對逆序對,簡單來說,所有逆序對的個數和就是找每乙個數的前面有幾個比他的大的數,他們加起來的和就是逆序對的總數。知道什麼是逆序對後就好辦了,...

逆序對(樹狀陣列 歸併)

題目描述 貓貓tom和小老鼠jerry最近又較量上了,但是畢竟都是成年人,他們已經不喜歡再玩那種你追我趕的遊戲,現在他們喜歡玩統計。最近,tom老貓查閱到乙個人類稱之為 逆序對 的東西,這東西是這樣定義的 對於給定的一段正整數序列,逆序對就是序列中i小於j同時ai大於aj的有序對。知道這概念後,他們...