樹狀陣列求逆序對 離散化 poj2299

2021-08-14 19:37:42 字數 692 閱讀 1416

今天做了乙個樹狀陣列求逆序對的題,需要離散化,看了部落格明白了為什麼要進行離散化,原因是樹狀陣列中的c[maxn]陣列其實相當於乙個雜湊操作,如果所給陣列中存在值特別大的元素,陣列就需要離散化

#include

#include

#include

#include

using

namespace

std;

struct a

;const

int maxn = 5e5 + 10;

a a[maxn];

int c[maxn];

typedef

long

long ll;

int lowbit(int i)

int n;

void add(int i,int v)

return ;

}int query(int i)

return ans;

}bool cmp(a a,a b)

int main()

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

ll ans = 0;

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

cout

<< ans << endl;

}return

0;}

樹狀陣列 (離散化 樹狀陣列 求逆序對)

sample test s input 52 3 1 5 4 output 3 題目大意 求逆序對的個數 題目分析 求逆序對有很多方法,比如說用合併排序 分治 樹狀陣列 線段樹,甚至連暴力 氣泡排序 也可以做,但是要注意會不會超時。這裡就講一下樹狀陣列的方法,這一題最有意思的是離散化的方法,這個方法...

樹狀陣列求逆序對及離散化

樹狀陣列求逆序對及離散化 逆序對指的是乙個序列中有兩個數ai和aj,iaj,即它們下標與數值的增減不一致,那麼對於這個問題 求乙個序列中逆序對的個數,該如何解決呢?我最初接觸到的方法是歸併排序,是個很不錯的方法,但是對於向我一樣的蒟蒻 還是有理解難度,而今天講的樹狀陣列解法,至少 理解難度降低了不少...

poj 2299 樹狀陣列求逆序數 離散化

最初做離散化的時候沒太確定但是寫完發現對的 因為字尾陣列學的時候,這種思維習慣了吧 1 初始化as i i 對as陣列按照num的大小間接排序 2 bs as i i 現在bs陣列就是num陣列的離散化後的結果 3 注意,樹狀陣列中lowbit i i是不可以為0的,0 0 0,死迴圈.includ...