洛谷P1801 黑匣子

2022-04-30 10:24:11 字數 1113 閱讀 3219

題目傳送門

分析:這題和另外乙個題目中位數非常相似,有興趣可以先看看,比這一題簡單。首先暴力模擬還是別想了,估計30%的資料都有點懸。正解應該是用二叉堆。但是如果用乙個堆當然不方便,所以建兩個堆,乙個大根堆,乙個小根堆,每次只要出現詢問操作,就把小根堆的堆頂丟進大根堆中維護,然後輸出就可以了,但是要注意,操作過程中一定要讓大根堆的堆頂小於小根隊的堆頂,也就是保證大根堆中的元素就是題目中的前i小的元素。這樣題目就變的非常容易了。

code:

#include#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int n=2e5+7

;int

n,m,opt[n],a[n];

inthmax[n],hmin[n];

intsizex,sizen;

inline

intread()

while(ch>='

0'&&ch<='9')

return flag?-num:num;

}inline

void insert_min(int

x)

else

break

; }

}inline

void insert_max(int

x)

else

break

; }

}inline

void

delet_min()

else

break

; }

}inline

void

delet_max()

else

break

; }

}inline

intchange()

intmain()

for(int i=1;i<=n;i++)

while(opt[i]>0

) }

return0;

}

洛谷P1801 黑匣子

題目鏈結 看到題解中 維護兩個堆 突然想到了這道題的解法 維護兩個堆 大根堆h1,小根堆h2 大根堆裡的是最小的i個值,小根堆裡是剩下的值 每add乙個值時 插入到小根堆中,再比較小根堆的最小值與大根堆的最大值 若h2.top 將兩個元素取出,換一下再放進去 需要get時 將h2.top 取出,放進...

洛谷P1801 黑匣子

long long就果然還是就該用cout,沒有lld的ll留下了悔恨的眼淚 鏈結一放,要看什麼對頂堆的走開走開,我只會離散化加權值樹狀陣列 首先吧,這個詢問依次遞增就友善的一批,然後詢問某刻第k位,我們用權值樹狀陣列。首先如果i有,那麼在陣列中下標為i的位置就打成1,沒有就是0,樹狀陣列裡面存的是...

洛谷 P1801 黑匣子

好像很久沒有更過部落格了,因為博主這幾周很忙。其實是在搞頹。題意很難懂,所以就不重複了。其實是懶。一眼看上去這是個 splay 裸題,直接插入乙個數,查詢區間第 k 大,但是這樣太不優美了,配不上 noi導刊 這幾個字,所以這題肯定有更優美的做法。注意到這道題有乙個很優美的性質,k 是遞增的,然後我...