ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF514D题解

2022-06-05 13:31:27  阅读:128  来源: 互联网

标签:数列 题解 复杂度 leq 杀死 敌人 ldots CF514D


题面

Description:
有 \(n\) 个敌人,每个敌人有 \(m\) 种属性值,第 \(i\) 个敌人的每个属性分别为 \(a_{i,1},a_{i,2},\ldots,a_{i,m}\)。你要构造一个长度为 \(m\) 的数列 \(b_{1\ldots m}\),规定敌人 \(i\) 被杀死当且仅当 \(a_{i,1}\leq b_1,a_{i,2}\leq b_2,\ldots,a_{i,m}\leq b_m\) 全部满足。

数列 \(b\) 要满足以下条件:

  1. \(\sum b_i\leq k\);
  2. 连续的被杀死的敌人数量最多。

\(1\leq n\leq 10^5,1\leq m\leq 5,1\leq k\leq 10^9\)。


从第 \(l\) 到第 \(r\) 个敌人都被杀死的必要条件是 \(\max_{l\leq i\leq r}\{a_{i,m}\}\leq b_m\)。既然要做最大值,首先想到用 ST 表维护。
然后我要连续的人数最多,所以二分连续的人数。对于每个长度 \(x\),我枚举数列中所有长度为 \(x\) 的区间,看我能否杀死这个区间中所有的敌人。形式化的,对于区间 \([l,r]\),我能杀死该区间内所有敌人,当且仅当 $$\sum_{i=1}^m \max_{j=l}^r a_{j,i}\leq k$$
那明显通过 ST 表做这个东西的复杂度是 \(O(m)\) 的。算上二分的复杂度,总复杂度为 \(O(nm\log n)\),可以通过本题。

实现时注意最大长度为 \(0\) 时的输出方式。

代码

标签:数列,题解,复杂度,leq,杀死,敌人,ldots,CF514D
来源: https://www.cnblogs.com/1358id/p/16343819.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有