求逆序數 樹狀陣列

2022-05-16 15:36:08 字數 603 閱讀 7664

首先解釋一下什麼是逆序數,在乙個排列中,如果前面的數大於後面的數,則稱這兩個數為一對逆序,而在這個排列中逆序對的總數稱為逆序數。

我們要求逆序數,不能直接針對這個排列進行樹狀陣列的新增和求和,這樣也沒有意義。

我們需要對於排列中的每乙個數是否出現進行樹狀陣列的操作。用乙個陣列vis,vis[i]=1表示i在這個排列中,為0就表示不存在。

那我們遍歷一遍排列,對於出現的每乙個數,我們進行樹狀陣列的新增,加一。表示這個數出現在排列中了。而如果求和的操作,即表示求在當前位置之前比這個數小的數目。

那i-sum(a)即表示大於這個數的數目,i是當前數的位置,a表示這個數。

#include using

namespace

std;

int num[100005

];int n=100005

;int lowbit(int

i)void add(int x,inty)}

int sum(int

x)

return

ans;

}int

main()

cout

}return0;

}

樹狀陣列求逆序數

逆序數就是數中各位在它前面有多少個數比它大,求出這些元素個數之和。今天看了個樹狀陣列,可以很好的解決這個問題,普通方法需要o n 2 複雜度,用樹狀陣列只需要o nlongn 樹狀陣列實際上還是乙個陣列,只不過它的每個元素儲存了跟原來陣列的一些元素相關的結合值。若a為原陣列,定義陣列c為樹狀陣列。c...

樹狀陣列求逆序數

chikachika說希望和我一起做學園偶像的時候,我真的很開心。watanabeyouwatanabeyou 曜是千歌的青梅竹馬,但是aqoursaqours成立以後,千歌似乎總是與梨子在一起,而把曜冷落了。為了讓千歌知曉自己的心意,曜醬決定做一件大事!她決定把乙個給定的11 nn的排列 1 ai...

樹狀陣列 求逆序數

一.樹狀陣列介紹 1 性質 樹狀陣列本質上就是乙個陣列,它與普通陣列不同之處在於它的某些元素維護的是一段區間的資訊,已區間和為例,若i為奇數,則第i個元素就是源資料的第i個元素,若i為偶數,則第i個元素維護的是 i 2 k 1,i 這段區間的和,k代表i的二進位制末尾0的個數。2 作用 樹狀陣列常用...