傳送門:
**如下:
#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 ...