2023 CCPC Asia Regional Qinghuangdao
Problem D 茶和咖啡
思路
观察到能用的券只取决于最早的选择天数,设当前最早的喝咖啡日为pos
,则每新增一天,我们有以下两种策略:
- 选择比目前最早的天数更早的一天,即从
[1, pos-1]
天中选择一天。 - 选择比
pos
更晚的一天,即[pos+1, n]
天。
对于第一种,我们可以做优惠券的后缀和w[i]
,表示第i
天能享用的优惠券的总优惠,则可知选择第i
天的贡献值为w[i]-w[pos]
,则最优决策显然为:\(min_{i=1}^{pos-1}(w[i])-w[pos]\),显然可以用std::set
或权值线段树进行维护。
对于第二种,我们只需求[pos+1, n]
中最小的a[i]
,即\(min_{i=pos+1}^n(a[i])\)。同样用set
或权值线段树维护即可。
然后对比两种决策,选更优的决策即可。
*当两种最优决策贡献值相等时,注意到前一种可以使下一次的决策数量增加更多,所以选择向前扩展。
总的复杂度\(O(Tnlog_2n)\)。
## Problem F 质数之谜