D Multiset(帶排名的陣列陣列)

2022-05-01 11:06:11 字數 817 閱讀 1981

題:

題意:有個multiset,開始有n個數,有倆種操作,1、加入ki。2、刪除集合中第k小的,問最後若這個集合大小不為0輸出任意乙個數,否則輸出0;

分析:由於記憶體要求,不可用splay之類的資料結構,也有點大材小用,那麼考慮用樹狀陣列處理,這裡有個排名的問題,要是我們知道排名的數是哪個就基本能用樹狀陣列解決,下面是用字首和的樹狀陣列來得到排名k的數。

#include using

namespace

std;

typedef

long

long

ll;#define pb push_back

const

int inf =0x3f3f3f3f

;const

int m=(1

<<20

);const

int n=(m)+6

;const

double pi=3.1415926535

;int

tr[n];

struct

bit

int kth(int

k) }

return res+1

; }

}bit;

intmain()

while(q--)

else

}int ans=bit.kth(1

);

if(ans>=m)

else

printf("%d

",ans);

return0;

}

view code

D Multiset(樹狀陣列 二分)

二分 樹狀陣列做法 這個時候我們的 tree 陣列就相當與乙個桶,每個桶裡統計的是值為其下標的個數,通過樹狀陣列的字首和性質,我們可以通過二分輕鬆的鎖定第 k 項的位置,然後進行刪除操作,具體的操作細節看 實現。權值線段樹做法 線段相較而言,常數大一些,維護的基本思路還是更樹狀陣列是一樣的。當我樹狀...

CF1354D MultiSet(樹狀陣列 二分)

題意 有兩種操作 一種是把乙個元素加入到集合中,一種是刪除集合中第k個元素,求解最後集合裡的元素。題解 祖傳的樹狀陣列套二分,這種題可遇不可求,比賽時直接秒了,不太會出現這麼裸的資料結構題了,includeusing namespace std const int maxn 1e6 500 int ...

python陣列排名

因為最近要用到kendalltau ktau 這個指標,就是反應兩組序列的等級的相關係數 所以需要對陣列進行排名 如 2,4,3 的排名就應該返回 0,2,1 然後想起numpy裡面有個argsort,可以返回陣列排序後的索引 然後我就以為argsort的返回值就是排名了。其實並不是!是索引!如果要...