Live2D

Solution Set -「LOCAL」冲刺省选 Round X

Summary

  时间利用效率?

  同学,你的效率呢?

  我真不知道中途几个小时干了啥,我也不知道我实在划水、神游还是真的在自闭想题。

  虽然真实考场肾上腺素不会允许我这么做,但模拟赛还是得提起精神啊。

  哦,我不是生竞的,上面那句话当成伪科学。

Solution

A 下落的数字

  给定以 1 为根的带点权树,定义 ktravel 为:从根出发,每次走到孩子点权集合中取到 lower_bound k 的点,若不存在则停下,设最后到达结点 u。现进行 m 次操作:

  1. 修改单点点权;
  2. 给定 k,求当前树上 ktravel 的终止点。

  n,m2×105


  树剖。线段树维护穿过一整段重链时,travel 值的取值区间。询问时模拟跳重链。复杂度 O((n+q)logn)

B 序排速快

  给出一个排序方法:

2022-03-16 22-09-00 的屏幕截图.png

其中,称 i 为 partition point,当且仅当 maxjiAiminjiAj。对于 n=L..R,求所有 n 阶排列在该方法排序完成后的 cnt 值之和。

  LR107


  缺的不是所谓结论,而是好看的结论。不要抓着“等价转化”不放,因而舍弃一条捷径。

  显然应该对 A 的每个位置分别求被冒泡了多少次。考虑 Ai 经历一次冒泡时:

  • j<i,Aj<Ai,则这样的 j 减少一个;
  • 否则若 ij<k,AjAi>Ak,则这样的 j 减少一个;
  • 否则,i 是 partition point,不会被冒泡。

  结论比起我想到的要冗长,但是它“好看”——它是单纯的计数,没有取 max 之类的数值讨论。

  接下来,讨论计数。对于第一类贡献,发现就是逆序对个数。令 f(n) 表示所有 n 阶排列的逆序对数量,那么

f(n)=nf(n1)+n(n1)2(n1)!.

  对于第二类贡献,注意到贡献中对 A 的大小要求比较复杂,而根据排列具有的多样“子问题”处理方式,我们可以枚举 n 所在的位置 j,统计满足条件的 (i,j,k) 的数量。注意 k 实际上没有参与数量贡献,而对于一个 i<j,显然已有 AjAi,若 (i,j) 有贡献,则 k>j,Ak<Ai。这一步用一个小 trick:概率问题与计数问题可以相互转化来简化讨论。我们求 k 的概率,显然这些下标的具体值都不影响概率,问题就是——排列里有 nj+1 个数,求第一个数不是最大值的概率,显然嘛,njnj+1。因而,设 g(n) 表示所有 n 阶排列的第二类贡献和,那么

g(n)=ng(n1)+(n1)!(i=1n11+nini+1(i1)).

后面那一坨随便整理一下就能递推求了。复杂度 O(R)

C

  给定含 n 个点 m 条边的点双连通图及其两棵生成树 T1,T2,每次操作取 T1 的一片叶子,去掉它与父亲在 T1 内的连边,并指定其新父亲。构造把 T1 变成 T2 的操作方案。

  n100


  被卡了一个点 qwq,简单胡一下。

  搜索,但是有条理。我们为两棵树指定同一个根,然后自上而下递归地构造出每条正确树边。需要做到一个清空 T1 内某结点子树的操作,暴力递归进去,把每个点丢到子树外即可。讲错了不负责。(

  我本来浅写了一下,没有精细的限制,大概 50 分,然后加上一个“每次遍历邻接点,按一个随机排列的顺序遍历”,就只剩最后一个 subtask 的最后一个点过不了。事实证明乱搞的时候应当随机起来。(

posted @   Rainybunny  阅读(120)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示