APIO2019 题解

T1 奇怪装置

题目传送门

https://loj.ac/problem/3144

题解

很容易发现,这个东西一定会形成一个环。我们只需要求出环的长度就解决了一切问题。

设环的长度为 \(l\)。那么从 \((0, 0)\) 出发,走 \(l\) 步一定可以再次回到 \((0, 0)\)。

也就是说
\[
\left\{
\begin{align*}
& A \mid l + \lfloor \frac lB \rfloor\\
& B \mid l
\end{align*}
\right.
\]
所以 \(\lfloor \frac lB \rfloor = \frac lB\)。因此设 \(x = \frac lB\),则 \(l = xB\),则 \(A \mid x(B + 1)\)。

所以 \(x = \frac{\operatorname{lcm}(A, B + 1)}{A(B + 1)}\),\(l = xB = \frac{\operatorname{lcm}(A, B + 1)B}{A(B + 1)}\)。

有了 \(l\) 之后就是求区间的并的大小了。这个东西可以直接排序一遍就可以了。

代码

https://loj.ac/submission/688026


T2 桥梁

题目传送门

https://loj.ac/problem/3145

题解

先考虑这样一种做法:

首先如果我们暴力把当前的所有点权大于等于 \(w_j\) 的边加入并查集,那么这次询问的答案就是 \(s_j\) 所在并查集的大小。

这样是 \(O(Qm)\) 的。

想要把这个暴力改的稍微优雅一点可以这样:

先找出所有没有被修改过的边加入并查集。

对于每一次询问,枚举所有修改,对于在它之前最后一次修改这条边的一次修改,如果修改后的权值大于等于 \(w_j\) 就加入并查集。这里的并查集需要回退。

这样的时间复杂度变成了 \(O(m\log m + Q^2\log m)\)。

我们发现,这样做涉及到的边只有询问的边。我们是不是可以每隔几次询问就暴力重构一遍来保证目前没有被重构的询问尽量少呢?这样做可以看成把询问分成很多块。

如果采用这样的策略,那么我们每一次询问只需要遍历这一块内的修改即可。

那么这样的时间复杂度就是 \(O(\frac{Qm\log m}B + QB)\)。

当 \(B = \sqrt{m\log m}\) 时最优。

这样的时间复杂度就是 \(O(Q\sqrt{m\log m})\)。

代码

https://loj.ac/submission/688889


T3 路灯

题目传送门

https://loj.ac/problem/3146

题解

对于每个点 \(x\) 维护其所在段的右边界 \(r_x\)。那么从 \(a\) 能够到达 \(b\) 当且仅当 \(r_a \geq b\)。

可以用树套树维护 \(r_i\)。对于一次 toggle 操作,不管是点亮还是熄灭,影响到的 \(r_i\) 都只有这个区间的修改点 \(x\) 左边的部分,内容是把它们的 \(r\) 修改成 \(x\) 或者从 \(x\) 修改成一个更大的。

同时,可以发现,一个路段在 \(i\) 时刻通了,那么它可以带来贡献 \(q - i\) 的时间。如果在 \(j\) 时刻断了,那么它带来了 \(q - i\) 的负贡献。我们只需要维护这个这个东西就可以了。

所以树套树的第一维是 \(i\),第二维是 \(r_i\),存储的是 \(r_i\) 变成 \(j\) 的贡献。但是需要特判的是,如果查询的时候路段处于联通状态,那么需要从总贡献中扣除 \(q - now\)。

听说还可以用 cdq 分治维护,应该也是差不多的做法了。

代码

https://loj.ac/submission/688370

最新文章

  1. Java IO工作机制分析
  2. CH Round #56 - 国庆节欢乐赛解题报告
  3. phthon
  4. 命令行构建Unity项目
  5. 一个通过网络转换Ico到Png图片的小小程序(Ico2Png)
  6. AES对称加密算法原理
  7. mysql 保留两位小数
  8. git 命令的使用(一) add commit push pull
  9. 在stm32上移植wpa_supplicant(一)
  10. JdbcTemplate增删改查
  11. 修改本地数据库root权限密码
  12. jenkins容器权限被被拒绝
  13. CentOS、Ubuntu配置网卡子接口
  14. Js基本函数 2017-03-20
  15. Collection接口中方法的使用
  16. Service Broker 概述
  17. THE LAST ONE!! 2017《面向对象程序设计》课程作业八
  18. concat函數 函數concat 可以用來合拼兩個或以上的字串。
  19. Qt学习之路(45): 自定义model之一
  20. LeetCode: Merge Intervals 解题报告

热门文章

  1. ACL 2019 分析
  2. SAAS方法论
  3. 20191127 Spring Boot官方文档学习(4.10)
  4. shell脚本每隔几秒执行
  5. [转帖]安全公告【安全公告】CVE-2019-0708远程桌面服务远程代码执行漏洞
  6. [19/10/16-星期四] Python中的文件操作
  7. 深入IO 想学必看!受益匪浅哦~
  8. 小z的洞穴之旅 QDUOJ 并查集+连通块
  9. dfs(最佳路径)
  10. JDBC插入中文数据出现?号地解决问题