2025 贵阳 代码源 Day5 模拟赛

# [Day 5 模拟赛](http://oj.daimayuan.top/contest/366)

## A

枚举 $R_1$ 和 $L_2$ 中间分割点,相当于求前缀和后缀内最大子段和,两次枚举就求完了。

## B

把丢到的最小改成选的最大。结构体存一起,按照 $c$ 和 $h$ 排序两次,枚举剩下 $h$ 的上限,以按 $c$ 排完序后的下标在线段树上加点,因为我们要尽量选 $c$ 最大的玩偶,就在线段树上二分,保证前缀玩偶数量不超过已选的最大 $h$ 的数量。

## C

发现到达点 $v$ 的最短时间就是 $dis_v\gets\max(a_v,dis_u+1),u\to v$。这时我们考虑整条路径上高度变化情况,可以考虑到一定是一直不断的上升后等待 $0\to 1$ 个点后一直下降,这样就考虑枚举峰值位置。

我们分别从 $1$ 和 $n$ 开始 dijkstra 求得 $dis_{1,i},dis_{n,i}$,枚举峰值位置,注意要判断只有 $|dis_{1,i}-dis_{n,i}|\le1$ 才可能是峰值,否则可以发现该条路径上的峰值一定会出现在别的位置上。

## D

发现一个关键性质,如果一个区间 $l_1, r_1$ 包含 $l_2, r_2$,则我们对 $l_1, r_1$ 只用考虑将其添加到 $l_2, r_2$ 同一组中或独立开成一组,这样我们就可以把所有包含其它区间的区间去除掉,只用考虑没有包含其它任何区间的区间。又发现因为这些剩下的区间肯定互不包含,所以我们将剩下的区间按左端点排序后右端点也将是有序的。

有了这两个性质之后我们就可以开始 dp 了,先只考虑剩下的区间将其排序,用 $f_{i,j}$ 表示在前 $i$ 个区间中已经完成了 $j$ 组,总和是多少,转移 $f_{i,j}\gets \max(f_{k,j-1}+r_{k+1}-l_i+1),r_{k+1}\ge l_i$,因为要保证全部有交 $r_{k+1}\ge l_i$,所以考虑单调队列优化。

接下来考虑之前排除掉的区间,按照之前的想法,我们枚举 $i:=1\to n$ 表示我们通过剩下的区间完成了 $i$ 组,接下来考虑最长的之前排除掉的 $n-i$ 个区间,将这 $n-i$ 个区间都自成一组,答案就是 $f_{n,i}$ 加上最长的 $n-i$ 个被排除掉的区间的长度总和;再剩下的直接合并到其包含的区间中的随便一组就好,不用考虑这部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值