专栏文章
两个序列任意选相同数量元素
算法·理论参与者 6已保存评论 8
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 8 条
- 当前快照
- 2 份
- 快照标识符
- @miexblqz
- 此快照首次捕获于
- 2025/11/26 02:43 3 个月前
- 此快照最后确认于
- 2025/12/01 19:27 3 个月前
标题应该叫什么。?
给定序列 ,。
对于问题:从 , 中分别选出 个元素。
解决方案:考虑 选了的和 没选的元素加起来恰好 个。
这样, 的具体值我们就不用关心了。
例 :
多组询问,,。
考虑上述思路,相当于从 个物品中任意选 个物品的方案数。
其中前 个物品中当前选到表示原来的选到,后 个物品中选到表示原来的没选到。
原式 ,预处理阶乘逆元即可。
例 :
需要维护多重集合 和 :
,在 或 中加入或删除一个元素 ;
,在 和 中选择相同数量的元素,最小化选出元素之和并输出。
操作 次。
先考虑正常做法。
维护一个权值线段树或树状数组,由于(排序后)选出的 和 单调递减,二分选择的元素数量 使得 即可。
因为在权值处维护, 和 不在数据结构的同一位置。发现二分放不进去数据结构里,只能做到 。
考虑用上面的技巧。
选的和 不选的元素总数一定是 的元素总数。
稍微转换一下,先钦定选了所有的 ,然后把 和 放进线段树或树状数组。
想要找到桶中的前 个之和,显然线段树或树状数组二分,时间复杂度 。
总结:以上面的为例,排列组合等价的东西实在是太多了,因此彻底明白本质是困难的,我们只需要找到一条路径就可以。
相关推荐
评论
共 8 条评论,欢迎与作者交流。
正在加载评论...