[AHOI2018初中组]分组 题解

题目链接:https://www.luogu.com.cn/problem/P4447

很容易想到排序后离散化。

比如: -1 0 0 1 1 2

这样的序列可以离散化为:

编号:1 2 3 4

ai:       -1 0 1 2

cs:    1 2 2 1

ai记录的是它原来的能力值,cs对应的是每个能力值的人数。

首先,可以知道的是,只有连续的一串能力值能被分在一组,所以如果出现 1 2 3 6 7 这样的,很容易知道需要将123和67分开处理。

那么就是要解决,如果是连续的能力值,如何使分组人数最少的那组人数最多。

很容易有一种感受是,我们希望一组尽量长,但是又不能太长。

拿上面的例子举例 -1 0 0 1 1 2,如果最长那就是-1 0 1 2,但如果这样选了之后,0 1就被剩下了,剩下的0 1就是人数最少的组,最终答案是2。但如果我们稍微选短一点-1 0 1剩下的就是 0 1 2,答案就是3.

映射到cs数组上就是维护一个不下降序列,第一次是1 2 2,长度为3,在将选的人拿出以后剩下0 1 1 1,第二个不下降序列就是1 1 1(因为是维护不下降序列,出现cs为零一定是从左往右以此出现的,不可能出现1 0 1 1 1这种情况,所以可以删去前导零),长度为3,选完后,再将选出的人删去ÿ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值