2025.2.6
HZTG 鸬鹚
注意到矩形至多合并 \(n-1\) 次。
考虑对 \(x\) 维扫描线,用线段树维护 \(y\) 维。
按每个矩形的 \(x_2\) 排序,将 \(x_2\) 信息挂在线段树上(用链表的东西存),查询使用 \(x_1\) 进行判断即可。
注意到排序后每次在链表从后向前查是具有单调性的(因为加入时就是具有单调性的),所以可以倒叙遍历加懒惰删除。
但此时依旧有点问题,因为这个东西是标记永久化的形式,而修改查询都是区间的形式,所以得再维护一下虚树信息(类比树套树分讨贡献即可)。
时间复杂度 \(O(n\log n)\)。
HZTG 雪雀
首先考虑 \(O(n)\) 的单源最短路,注意到对于一列 \(a_{1,i},a_{3,i}\) 之间的最短路会恰好经过 \(a_{2,j}\) 一次,所以可以分讨是在 \(i\) 列的左右,预处理 \(f_i,g_i\) 分别表示只考虑 \([1,i],[i,n]\) 时 \(a_{1,i},a_{3,i}\) 之间的最短路,转移形如 \(f_{i}=\min(f_{i-1},a_{2,i})+a_{1,i}+a_{3,i}\)。
此时就能通过 \(f,g\) 数组 \(O(n)\) 求单源最短路了,具体的对于枚举的一个点 \((x,y)\) 此时能得知 \((1,x),(2,x),(3,x)\) 的最短路,考虑往两侧递推,分讨每个点最短路的转移方向(即上下左右),对于左右就可以使用 \(f,g\) 数组来更新。
此时得到 \(O(n^2)\) 的做法。
对于求所有路径的问题,考虑分治。
具体的设一层的分治中心为 \(mid\) ,每次解决 \([l,mid]\) 与 \([mid+1,r]\) 之间的最短路。
考虑 \(u,v\) 之间的最短路只能是由
\(u\to(1,mid)\to(1,mid+1)\to v\)
\(u\to(2,mid)\to(2,mid+1)\to v\)
\(u\to(3,mid)\to(3,mid+1)\to v\)
设 \(A_{1/2/3}\) 表示 \(u\) 到 \((1/2/3,mid)\) 的最短路,\(B_{1/2/3}\) 同理。
则最短路为 \(\min(A_1+B_1,A_2+B_2,A_3+B_3)\),考虑分讨经过 \((1,mid)\to(1,mid+1)\) 时边权的限制,应有 \(A_1+B_1\le A_2+B_2,A_1+B_1\le A_3+B_3\) 移项得 \(A_1-A_2\le B_2-B_1,A_1-A_3\le B_3-B_1\),变为二维偏序问题,1-side 扫描线,2-side 树状数组即可。
注意最短路相等的情况,此时钦定一个优先级,将一些 \(\le\to<\) 即可。
时间复杂度 \(O(n\log^2n)\)。
HZTG 燕鸥
打表题 \(\dots\)
大致的就是打表找规律得到能单点单次 \(O(\log_3n)\) 查询做法。然后进一步发现只用查询 \(O(\log_3n)\) 个点即可。
时间复杂度 \(O(T\log_3^2n)\)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探