首先乙個結論是選定的k個高度一定是他們的中位數,證明見白書p6
然後我們可以列舉每個區間,用set維護區間中位數。
注意multiset的刪除操作是把所有這個值的都刪去。所以又用了乙個map
注意查詢時如果集合為空的處理
p黨是怎麼想的這道題?
#include#include
#include
#include
#include
#include
#define md
#define ll long long
#define inf (int) 1e9
#define eps 1e-8
#define n 100010
using namespace std;
struct cmp
while (sz[1]first; del(x,2); ins(x,1);
}mid=mp[2].begin()->first; ans=min(ans,sz[1]*mid-sum[1]+sum[2]-mid*sz[2]);
}printf("%lld\n",ans);
return 0;
}
bzoj1112 樹狀陣列 磚塊Klo
description n柱磚,希望有連續k柱的高度是一樣的.你可以選擇以下兩個動作 1 從某柱磚的頂端拿一塊磚出來,丟掉不要了.2 從倉庫中拿出一塊磚,放到另一柱.倉庫無限大.現在希望用最小次數的動作完成任務.input 第一行給出n,k.1 k n 100000 下面n行,每行代表這柱磚的高度....
bzoj 5045 打磚塊 優先佇列
小q最近沉迷於一款新型 打磚塊 遊戲。在每局遊戲中,呈現在螢幕上的是一堵無限大小的牆壁。牆壁上鑲嵌著 無數長度為2 寬度為1的磚塊。牆壁被分成若干行,每行寬度都為1,相鄰兩個格仔形成乙個磚塊。相鄰兩行的磚 塊是間隔擺放的。牆壁從下往上行編號遞增,從左往右列編號遞增。如下圖所示 在遊戲的一開始,有n塊...
bzoj1047(單調佇列,矩陣中)
沒那麼難,不需要什麼二維單調佇列,其實只要改變一下順序就好 為了思路清晰,這裡採用的結構體 結構體函式寫的單調佇列 剛開始感覺不會,看hzwer的blog,上面說,題解都太麻煩,還不如手推,就沒繼續看下去,事實證明這道題回來一看就秒了,也不知道是怎麼想的。猜的?其實就是一行乙個單調佇列,端點每往右移...