hdu 2852 樹狀陣列

2022-05-13 17:59:57 字數 1503 閱讀 1350

擦 這題 絕逼 坑人 + 一波n折。。。。

touch  me

我一開始 用了最簡單 最sb的 一維hash陣列 來做 我看時間2000ms最大數才10w 還以為能過的 ...果斷tle了

然後 就覺得應該用更高效的資料結構來做了

我去問下了下porker 他一開始和我提了下  splay 不會啊=-=

然後 說 樹狀陣列 + 查詢的時候 用二分 也可以做到

我就去往 這個方向去想了--------tm的被自己思維定勢了... tree[x]把它固定成x有幾個了... 然後就一直沒做出來

後來 參考了傳送

最tm坑的是 我用cin cout一直tle明明已經寫了cin.sync..............

然後改成scanf printf 看a了之後 再改回來 再交 又tle了

臥槽...

1 #include 2 #include 3

using

namespace

std;45

const

int size = 100010;6

int tree[size];//

tree[x] 即 小於等於x的數有幾個78

int lowbit( int

x )9

1213

void update( int x , int

var)

1420}21

22int getnum( int

x )23

30return

cnt;31}

3233

int find( int x , int

k )34

46else

4752}53

return

ans;54}

5556

intmain()

5773

else

if( m==1)74

82else

8386}87

else

8899

}100

}101

return0;

102 }

view code

1 #include 2 #include 3

using

namespace

std;45

const

int size = 100010;6

inthash[size];78

intmain()927

else

if( choice == 1)28

34else

3538}39

else

4055}56

}57if( !flag )

58 cout << "

not find!

"<

60}61}

62return0;

63 }

view code

hdu 2852 樹狀陣列

在基礎上加了二分查詢 include include include using namespace std define m 100005 int n,a m int flage int lowbit int i void update int i,int val int sum int i re...

HDU2852 樹狀陣列 二分

思路 樹狀陣列是用來標記的!值 區間點!因為這裡值重複是算的,所有樹狀陣列存的是區間上該位置的個數。0 插入則插入。1 if sum x sum x 1 puts no.2 我們知道a 包括a 之前有多少個數x,求第k大的數,也就是求在樹狀陣列中第x k大的數。sum ans x k。這個可以直接二...

HDU 2852 樹狀陣列 無序第K小

題目大意 操作 往盒子裡放乙個數。操作 從盒子裡扔掉乙個數。操作 查詢盒子裡大於a的第k小數。解題思路 由於模型是盒子,而不是序列,所以可以用樹狀陣列的順序維護 逆序數思想。對應的樹狀陣列solution add val,1 類似維護逆序數的方法,對應位置上計數 1。注意add的while範圍要寫成...