這題奇數部分比較容易想到,用優先佇列維護每個位置前能否取到指定個數,這樣列舉每個位置座位中位數即可
對於偶數,由於兩個數字置不確定,並且不能列舉兩個,因此還是考慮要維護乙個
這樣就需要乙個log複雜度以內的演算法找到每個對應的最優解,常見的就是二分演算法
我們觀察題目性質,果然符合單調性,因為對於左邊定好的數,第二個肯定越右越好,並且我們知道越右滿足條件的難度越大,因此考慮二分找到最右點
#includeusingview codenamespace
std;
typedef
long
long
ll;typedef pair
pll;
const
int n=2e5+10
;const
int inf=1e9;
const
int mod=1e9+7
;ll v,n,m;
ll pre[n],suf[n];
priority_queue
q;struct
nodes[n];
bool
cmp(node a,node b)
intmain()
sort(s+1,s+1+n,cmp);
for(i=1;i<=n;i++)
}while
(q.size())
q.pop();
for(i=n;i>=1;i--)
}ll ans=0
;
if(m%2
) }
cout
}else
else}}
cout
}return0;
}
Processor 二分搜尋,優先佇列
題意 給出n個任務完成區間以及工作量,求出最快處理速度.思路 用二分搜尋匹配最優速度,其中還用到優先佇列輔助.列舉所有截止時間,在此時間內的都進隊,按照工作截止時間越早越先出隊,如果截止時間不及列舉的截止時間,則錯過 include include include include includeus...
多重揹包(普通 二分優化)
有 n 種物品和乙個容量是 v 的揹包。第 i 種物品最多有 si 件,每件體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。接下來有 n 行,每行三個整數 vi,wi,s...
LA4254 二分 貪心 優先佇列
題目 有n個任務,每個任務有三個引數ri,di,wi,表示任務i必須在 ri,di 內執行完,現有一台處理器,處理器執行的速度可以變化,速度為s時,乙個工作量為wi的任務執行的時間為w s,任務不一定連續執行,現在要求求出處理器在執行過程中最大速度的最小值。分析 首先一定是個二分,所以主要的地方在於...