HDU2689 Sort it(樹狀陣列求逆序數)

2021-07-30 06:55:18 字數 986 閱讀 8570

傳送門:

**如下:

#include #include #include #define maxn 10000

using namespace std;

int n,tree[maxn];

int lowbit(int i)

int update(int i,int x)

return 0;

}int query(int n)

return sum;

}int main()

1.輸入4,呼叫update(4,1),把第4位設定為1

1 2 3 4

0 0 0 1

計算1-4上比小於等於4的數字的個數,即query(4)=1,

1-query(4)=0 就可以得到對於4的逆序數為0。

2.輸入3呼叫update(3,1),把第3位設定為1

1 2 3 4

0 0 1 1

計算1-3上比小於等於3的數字的個數,即query(3)=1,

2-query(3)=1,就可以得到對於3的逆序數為1。

3.輸入2,呼叫update(2,1),把第2位設定為1

1 2 3 4

0 1 1 1

計算1-2上比小於等於2的數字的個數,即query(2)=1,

3-query(2)=2,就可以得到對於2的逆序數為2。

4.輸入1,呼叫update(1,1),把第1位設定為1

1 2 3 4

1 1 1 1

計算1-1上比小於等於1的數字的個數,即query(1)=1,

4-query(1)=3,就可以得到對於1的逆序數為3。

注意:這裡忽略了update函式對父節點的更新,但實際上是一樣的,父節點代表區間和。*/}

printf("%d\n",ans);

}return 0;

}

HDOJ 2689 Sort it 樹狀陣列模板

description hyh最近有點無聊,於是想出了乙個遊戲玩 給出乙個數字序列,每次操作只能交換相鄰兩個數字,需要多少次才能使數字序列按公升序來排。hint 例如1 2 3 5 4,我們只需要乙個操作 交換5和4。sample input 31 2 3 4 4 3 2 1 sample outp...

樹狀陣列 hdu2689 hdu2838

題意 給定乙個正整數n,和乙個1 n的乙個排列,每個數可以和旁邊的兩個數的任意乙個交換,每交換一次總次數就要加一,問將這個排列轉換成乙個遞增的排列需要多少次交換?題意可以轉換成求這個排列的逆序對數。include include include include using namespace std...

hdu 2689 線段樹實現

include define lson l m rt 1 define rson m 1,r rt 1 1 define maxn 1111 int sum maxn 2 void build int l,int r,int rt int m l r 1 build lson build rson ...