樹狀陣列 模板3 求逆序對(非離散化)

2021-09-12 20:08:19 字數 557 閱讀 6542

離散化的樹狀陣列:

這裡就提一下和普通樹狀陣列的區別,這裡是用要查詢的數當作下標,而普通樹狀陣列是直接順序下標放值,也就是說區別在於

updata函式,普通的是updata(i,k);//這裡的i就單純是區間下標;而求逆序對的時候是updata(a[i],1)。我們每次都是在這個數字大小的位置上新增1,然後去更新樹狀陣列,在計算逆序數的時候,只需要檢視一下比這個數小或等於的數有多少個,然後現在的位數減去前面比它小的就是所得這一位的逆序數。所有如果要判斷的值過大,就要離散處理了。

#includeusing namespace std;

const int maxn=1000000;

int c[maxn];

int n;

int lowbit(int x)

void updata(int pos,int k)

int getsum(int x)

return ans;

}int main()

cout

}

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

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

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

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

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

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