bzoj3110 K大數查詢(整體二分 線段樹)

2021-08-03 03:04:02 字數 1858 閱讀 8908

①將修改和查詢看做是一條佇列。

②二分乙個答案mid,然後掃一下佇列,用資料結構來依次(依照操作和詢問順序地)維護修改權值小於或等於mid的修改對每個查詢的貢獻。

③將資料結構清空。(注意時間複雜度)

④將修改和詢問分成兩份,其中

詢問:如果問題答案小於或等於mid,就放在佇列1。

如果問題答案大於mid,修改詢問(減掉小於或等於mid的問題對本答案的貢獻),然後放在佇列2。

修改:如果修改權值大於或等於mid,就放在佇列1,否則放在佇列2。

⑤遞迴往下做。

jeanne d』arc鎮樓

BZOJ 3110, K大數查詢

傳送門 要求維護乙個數列,支援在某部分的每個位置填上乙個數以及查詢某部分第k大的數字。終於學習了一下樹套樹的姿勢 其實和自己想的也差不多 但是不學還是打不出 來 外層是權值線段樹,內層是區間線段樹。要注意的細節比較多。二分查詢過程中結果可能超過maxlongint,需要用unsigned int型別...

bzoj 3110 K大數查詢(整體二分)

傳送門biu 整體二分。我選擇把資料用樹狀陣列維護,樹狀陣列可以支援區間修改區間查詢。你們可能永遠不會知道一道題沒開long long要調多久qaq include define lowbit x x x using namespace std define int long long struct...

bzoj 3110 K大數查詢 樹套樹

題目傳送門 time limit 20 sec memory limit 512 mb submit 5039 solved 1751 submit status discuss 有n個位置,m個操作。操作有兩種,每次操作如果是1 a b c的形式表示在第a個位置到第b個位置,每個位置加入乙個數c ...