当前位置: 首页 > news >正文

CSP-S2023

T4

CSP-S 2023 种树

显然答案有单调性,考虑二分答案 \(t\)

二分有什么好处呢?就是可以知道每棵树最坏在哪天种才能达到 \(a_i\) 的高度。(不二分是做不到的,因为 \(x\) 是从 \(1\) 开始计数的。)

而这个部分显然又可以通过二分解决,比如说二分了一个 \(l\),只需要 \([l, t]\) 这段时间内长的高度达到 \(a_i\) 即可。分 \(c_i < 0\)\(c_i \ge 0\) 讨论一下,用个等差数列求和公式快速算出。(注意一些爆 int, long long 的地方,题目有好的保证答案 \(\le 10^9\)

bool check(int u, int l, int r) { // u 地块的树,从 l 时刻长到 r 是否够ll vr = b[u] + 1ll * r * v[u]; // v 即题目中的 cll vl = b[u] + 1ll * l * v[u];// 加一些特判if (max(vl, vr) >= a[u]) return 1;if (l > rr[u]) return r - l + 1 >= a[u];if (v[u] >= 0) {return ((i128)(vl + vr) * (r - l + 1) / 2 >= a[u]); // CSP 应该可以用 __int128}int r1 = min(r, rr[u]);return (i128)(vl + b[u] + r1 * v[u]) * (r1 - l + 1) / 2 + r - r1 >= a[u];
}

设第 \(i\) 块地的树最坏在第 \(ti_i\) 天种下。

接下来怎么做呢?考虑一个贪心。

显然 \(ti\) 越小的越紧迫,所有按 \(t_i\) 排序,然后按这个顺序种即可(将 \(i\) 的祖先都种上)。

证明考虑临项交换法应该不难证出来。

时间复杂度:\(O(n \log^2 V)\)

这个主要要想到二分,求对 \(ti_i\)(两年前太弱了,磕了 \(2h\) 没磕出来),贪心还是挺符合直觉的(想 DP 的话其实是不知道策略的)。

http://www.hskmm.com/?act=detail&tid=36940

相关文章:

  • Spring Boot 中全面解决跨域请求
  • OpenTelemetry语义约定:规范可观测性数据,提升系统洞察力
  • 拓展欧几里得算法
  • 两两交换链表中的节点-leetcode
  • 算法第二章实践作业
  • 解决homebrew下载报错问题
  • 软考中级学习总结(5)
  • 软考中级学习总结(4)
  • 每日反思(2025_10_22)
  • docker: Error response from daemon: failed to set up container networking 解决办法
  • 实验2 现代C++编程初体验
  • CSP-S36
  • 新学期每日总结(第13天)
  • GCM(Galois/Counter Mode) 认证加密算法实现
  • 【学习笔记】slope-trick
  • 10.13-10.19学习做题笔记
  • 2025.10.22
  • yny计数题记录
  • 20232404 2025-2026-2 《网络与系统攻防技术》实验二实验报告
  • 1020302118兰逸霏的第一次作业
  • ubuntu 25.10 修改源 - ldx
  • pytorch学习笔记(1)
  • 20232318 2025-2026-1 《网络与系统攻防技术》实验二实验报告
  • 《中华人民共和国网络安全法》第二十一条这一核心考点
  • 嵌入式软件分层架构设计 - lucky
  • DP 基础题乱做
  • [题解]P4616 [COCI 2017/2018 #5] Pictionary
  • 二三级区别
  • 第九章-Where-1S-tHe-Hacker
  • CF 2023D Many Games