逆序對(樹狀陣列解決)

2021-08-29 18:48:33 字數 563 閱讀 9018

傳送門

solution:

由於數字的大小可能非常大,而且都是未知的,所以只能採用離散化的方式先將陣列離散化。

每次把這個數的位置加入到樹狀陣列中,因為是排完序之後,所以之前加入的一定比後加入的大

然後再查詢當前這個數前面位置的數。

#include#define n 40005

using namespace std;

int n,ans,tree[n];

struct node

a[n];

inline bool cmp(const node &a,const node &b)

inline int lowbit(int x)

inline void update(int x,int delta)

inline int query(int x)

int main()

sort(a+1,a+n+1,cmp);

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

cout<

逆序對(樹狀陣列解決)

傳送門 solution 由於數字的大小可能非常大,而且都是未知的,所以只能採用離散化的方式先將陣列離散化。每次把這個數的位置加入到樹狀陣列中,因為是排完序之後,所以之前加入的一定比後加入的大 然後再查詢當前這個數前面位置的數。include define n 40005 using namespa...

樹狀陣列求逆序對

題目描述 給定乙個陣列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 這兩個就算一對逆序對,簡單來說,所有逆序對的個數和就是找每乙個數的前面有幾個比他的大的數,他們加起來的和就是逆序對的總數。知道什麼是逆序對後就好辦了,...