hduoj 1394 樹狀陣列

2021-09-11 08:06:00 字數 660 閱讀 7047

#include #include #include using namespace std;

#define n 5000+5

#define debug 1

int c[n] = ;

int a[n] = ;

int lowbit(int x)

int getsum(int x,int n)

return ans;

}void update(int x,int value,int n)

}int main()

int min_inver_num = inver_num;

//此時已算出乙個序列的全部逆序對個數

//再每次將最前面的數字移到末尾,求得新序列的逆序對

//將最前面的數字移到最後面,意味著現在要將這個數最後

//乙個插入進去,所以它後面的數都會成為逆序對。

//故應該 + (sum[n] - sum[ai])

//又因為它是第乙個放進去的,所以它只會影響序列在它之前的

//故也要 - (sum[ai]-1)

for(int i=1;icout<}

//cout << "hello world!" << endl;

return 0;

}

hdu1394 樹狀陣列 解法

本題使用樹狀陣列果然更加快。樹狀陣列難點 1 如何遍歷樹 2 如何利用陣列資料 建立乙個樹狀陣列就如上圖紅色部分代表所有的樹狀陣列節點了。基本操作 查詢下乙個節點的計算,如不明白下面函式的作用,請檢視負數記憶體存放的問題。簡而言之就是 內存放是求反 1 利用這個函式可以神奇地尋找到其單親節點和兄弟節...

hdu1394 線段樹 樹狀陣列

題目 就是求乙個陣列的逆序數,然後依次將陣列的第乙個數調到最後,最後求出最小的逆序數 做了兩種,線段樹和樹狀陣列 利用線段樹求逆序數 每次將數字x插到線段樹的 x 位置,然後球一下,該線段樹右邊的和,即為逆序數的個數 第一次用線段樹,做這個。include include include inclu...

hdu 1394 樹狀陣列求逆序數

解題思路 這道題是求迴圈陣列中逆序數最小值,求逆序數這裡肯定是用樹狀陣列。只是這裡有一點點變化,由於題目中n位數是0 n 1的乙個排列,所以num i 可表示為比num i 小的數的個數。把第一位的數挪到最後一位,那麼整個序列的逆序數變化為ans ans num 0 n 1 num 0 num 0 ...