(補題)牛客小白月賽30 H 第 k 小

2021-10-11 17:24:04 字數 1344 閱讀 9013

鏈結

題目

有乙個長度為n的陣列,值為 a[i], 牛牛想找到陣列中第 k 小的數。比如1 2 2 3 4 6中,第 3 小的數就是2.

牛牛覺得這個遊戲太簡單了,想加一點難度,現在牛牛有 m 個操作,每個操作有兩種型別。

x 1代表操作一,給陣列中加乙個元素 x 。(0 ≤ x ≤ 1e9)

2代表操作二,查詢第 k 小的數。如果沒有 k 個數就輸出−1。

思路

一開始想著把所有資料放在multiset裡,既能維持有序,取元素也不是很麻煩,結果t掉了。

後來翻ac**的時候看到乙個非常好玩的思路:

建立乙個優先佇列q,數值按照由大到小排序,然後將q的長度鎖死在k

這句話是什麼意思呢?我們看一下樣例:

5 4 3

1 2 3 4 5

當我們將資料存入優先佇列q裡時,我們先看一下q的長度:

若小於k則放入q中;若等於k,這時再放入元素x,需要看一下q.top()與該元素的大小關係。

比如樣例中,放入前3個元素後,q.top()應該為3。當放入4時,我們需要看一下q.top()是否大於x。

3<4,所以無論後面的數如何,4一定不是第3小的那個。

如果我們向佇列中再放入乙個2,3>2,所以就當前而言,無論後面的數如何,3一定不是第3小的那個。

理解了上面這道題就簡單了,看**吧。

伊莉莎白!

}}《如果想戀愛就應該去努力爭取而不是繼續狗叫???》

牛客小白月賽 30

並查集或者最小生成樹 並查集 include include include include using namespace std typedef long long ll const int maxn 2e 5 int f maxn struct node e maxn bool cmp nod...

牛客小白月賽13 補題(ACDG)

a 通過已經給的 打表找規律,偶數輸出 1,奇數輸出1 includeusing namespace std int main void huaj ll a,ll b int main qianz 0 0 houz n 1 0 qianz 1 mp 1 houz n mp n for i 2 i n...

牛客的小白月賽24補題

沒注意負數取模 呀呀呀呀,打腦殼 保證取模後的結果為正數 x mod mod mod 思路1.挨個嘗試肯定超時 2.就是把平方項展開 a2 b2 2ab 每個平方項的出現次數n 1次 每個2ab形式的和 最後一定注意取余為正數 戳我試試看 include include include includ...