hdu 3743 樹狀陣列

2022-05-22 07:18:08 字數 629 閱讀 3128

思路:我們只需堅守乙個原則,本來就在左邊的堅決不把它換到右邊。也就是相鄰的兩個數,左邊小,右邊大,那麼就不調換。這樣對每個數,只要統計左邊比它大的數的個數。可以從後面開始用樹狀陣列統計比它小的數的個數是一樣的。

#include#include

#include

#include

#define maxn 1000010

#define lowbit(x) (x&(-x))

using

namespace

std;

intc[maxn],num[maxn],n,r[maxn];

void

init()

int cmp(int a,int

b)int sum(int

pos)

return

sum;

}void update(int

pos)

}int

main()

__int64 ans=0

;

for(i=n;i>=1;i--)

printf(

"%i64d\n

",ans);

}return0;

}

HDU 3743 樹狀陣列,離散化

其實,我也知道這道題是求逆序數來做的,但是問題來了,怎麼求逆序數,常規的解法肯定是不行的,因為資料量很大,那麼想到能用線段樹來做,是可以的,不過我還沒敲過,既然在看樹狀陣列就用這個做。又因為資料可以達到一百萬,並且資料又用不到,所以可以對資料進行離散化 include include include...

hdu 3887 樹狀陣列

給你一棵樹,每個節點都有個編號。讓你求乙個節點他的子樹中編號比他小的節點有幾個。編號唯一,從1 n,已給出根節點 解 樹狀陣列統計。轉化為線性序列。可以想到的是,若要統計乙個節點,那麼比它小的孩子必須先插完,然後統計就行了。對於乙個節點i來說,只要把所有x那麼對於所有節點來說也是這樣的,從一開始插,...

hdu 3333 樹狀陣列

此題與3743相仿,但本題資料較大,需要用到離散化。如何去掉重複元素呢?採用離線演算法 首先將詢問按右端點從小到大排序,離線處理時,記錄每個元素所在位置,遇到重複元素時,從它之前出現的位置減去這個元素,這樣就是的每個元素總是出現在最後。include include include include ...