专栏文章

24.12.20

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqq2q7e
此快照首次捕获于
2025/12/04 08:53
3 个月前
此快照最后确认于
2025/12/04 08:53
3 个月前
查看原文

CF1930H

概述:交互库给你一棵树,你需要在所有询问开始前给交互库两个排列 p1,p2p1,p2,随后交互库每次生成一个排列 aa 与两个点 u,vu,v,要让你求树上 u,vu,v 路径间 aia_imexmex,你可以询问 55 次两个排列上的区间最小值。n×q3×106n\times q\le3\times 10^6
解法:对于排列,显然有 mexiSai=mini∉Saimex_{i\in S}a_i = \min_{i\not \in S}a_i,因此我们可以将原问题转为询问路径补集的 min\min。路径补集刻画为比 lcalcadfndfn 还小的点,比 max(dfnu,dfnv)\max(dfn_u,dfn_v) 还大的点,以及路径上所有点左右挂着的点。
先让 p1p_1 为原 dfndfn 序,对上述两种点询问,发现第二种点包括了 lcavlca \to v 链上的挂在右边的点。启发我们让 p2p2 为反着的 dfndfn,询问 >dfnu>dfn_u 的点,这样也包括了 lcaulca\to u 链上挂在左边的点。
考虑剩下的点,容易发现 lcaulca\to u 的右边的点显然满足 dfnu<dfni<dfnpdfn_u<dfn_i<dfn_p,其中 pplcavlca\to v 链上的第二个点。因此询问一次即可。 lcavlca\to v 同理。

qoj8922

概述:
nn 个人赛跑,第 ii 个人有一个速度 tit_i 表示他走单位距离需要的时间。第 ii 场比赛为编号 [1,i][1,i] 的人参加。
赛跑场地始终相同,都有 mm 个存档点,坐标依次为 sis_i。最后一个存档点是终点。初始时所有人从 00 出发,每次有人遇到存档点时其他所有人都会传送回自己的上一个存档点(同时则编号小的视为先到)。到终点的人不会被传送。
求问每场比赛的总传送次数。n,m,sm1.5×105,ti109n,m,s_m\le 1.5\times 10^5,t_i\le 10^9
思路:
考虑传送事实上只是某个人前进了一个存档点,每两次传送之间互不影响。
对于两个人 i,ji,j,若 ii 更快则 ii 一定让 jj 传送了 mm 次。因此我们答案至少是 i(i1)2\frac {i(i-1)} 2
再考虑更多传送的部分,事实上是较慢的 jj 由于走的距离短导致了 ii 的传送。那么这个时候我们完全可以视为 ii 在走最长的一段(总时间消耗最大),而 jj 在走某个前缀最大值(前一个时间比后一个长,那么走完前一个后必然会马上走下一个)。再根据上面说的传送互不影响,我们发现最终答案就是所有 (i,j)(i,j) 传送次数的和。
由此得到一个看似 O(n2m)O(n^2m) 的算法,暴力枚举 (i,j)(i,j),再根据前缀 max\max 们暴力判断 jj 会走到哪里。但是发现各段长总和仅有 1.5×1051.5\times 10^5 种,因此前缀 max\max 数量仅 V\sqrt V 种。做到 O(n2V)O(n^2\sqrt V)
优化是显然的:考虑每次加入一个人 ii,对他之前的人与他的快慢关系讨论。ii 较快则是枚举前缀 max\max,分成 V\sqrt V 个区间询问。容易想到一个 Vlogn\sqrt V\log n 做法:区间询问用树状数组维护,而找到区间用二分。前半部分经典平衡规划;后半部分由于前缀 max\max 数量少,区间左右端点单增,因此双指针预处理即可。ii 较慢时是对偶平衡规划问题,不细讲。至此本题做到 O(nn)O(n\sqrt n)

评论

0 条评论,欢迎与作者交流。

正在加载评论...