2021.10.04pm

10.04PM

预期 实际
A 0 0
B 0 0
C 0 0
D 0 0
S 0 0

属于是爆零了。
策略上出大问题,先做的D····。
难度我觉得有点不太均衡,前三道难度低了一些,但整体感觉还不错。

A Luogu P4552 [Poetize6] IncDec Sequence \(\blacktriangle\)

  1. 区间修改,容易想到差分。由于又可以加又可以减,显然最优情况是找差分数组中的一个正数和一个负数进行抵消。进一步就是用所有的正数和负数之和进行抵消,但很有可能有剩余,这时候选择头或者尾进行修改,这样能得到绝对值之差加一种不同的序列。(\(b_1\) 不一样,而其它都是0)

B 绿豆蛙的归宿进阶(逆元)\(\blacktriangle\)

  1. 可以正推,也可以逆推。
  2. 正推是长度*概率,逆推直接就是期望。
  3. 对于逆推,显然有\(ex[u]=\sum (ex[v]+edge[u\to v])/out[u]\)
  4. 同时由于是有向无环图,为了避免重复访问,自然拓扑排序。

C 乒乓 \(\blacktriangle\!\blacktriangledown\)

题意:

选取乒乓球台的任意一个平面,打出了n个球,初始速度分别为 ,为一个二维向量\((x_i,y_i)\) ,定义AK指数为:

\[AK(l,r)=\sum_{1 \le i < j \le r}(x_iy_j-x_jy_i)^2 \]

要求支持两种操作:点修改,查询AK

题解:

  1. \(AK(l,r)=\sum_{1 \le i < j \le r}(x_i^2y_j^2+x_j^2y_i^2-2*x_iy_ix_jy_j)\)

  2. 再稍作修改,\(AK(l,r)=\sum_{i=l}^rx_i*\sum_{j=l}^ry_j-\sum_{i=l}^rx_i^2y_i^2-(\sum_{i=l}^rx_iy_i*\sum_{j=l}^rx_jy_j-\sum_{i=l}^rx_i^2y_i^2)\)

  3. \(AK(l,r)=\sum_{i=l}^rx_i*\sum_{j=l}^ry_j-\sum_{i=l}^rx_iy_i*\sum_{j=l}^rx_jy_j\)

  4. 维护三个支持单点修改区间查询的数据结构(树状数组)。

D 阿尔塔拉 \(\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\)

题意:

一棵树,1为父亲节点,支持查找两点之间是否有值大于K的点,有多个则输出编号最小的点,同时支持从节点到根区间修改1。 \(m\) 次查询,每次输出\(Ask(x,y)\),并 \(add(y)\)。

题解

  1. 这道题第一直觉肯定是树剖,但是 \(O(n\log_n^2)\) 会被卡(更别说\(O(n \sqrt n)\)),强制要求 \(O(n\log n)\)。
  2. \(P.S.\) 这个程序是在阅读”非常潮“的标程之后写出的。
  3. 有这样一个性质:如果一个点的值大于K,它的父亲的值也肯定大于K,满足递增性。同时,又可以用 \(ST\) 维护区间最小编号,\(O(1)\) 查询。
  4. 而一个点的值大于K,必然是儿子的操作次数大于K,用树状数组维护前缀和,查询子树大小。
  5. 但这样时间复杂度还是有问题。我们需要在 \(add\) 的同时更新子树。而从下往上修改复杂度还是 \(\log\) 显然该T还是T,得要从第一个没有破坏的点往下更新。这需要提前找到每个点的儿子,以找到从根到该点的路径。在 dfn 序中,显然有 \(dfn[son_1]<dfn[son_{{son}_1}]<dfn[son_2]\),所以可以二分来查找,同时打上标记,这样时间复杂度是均摊 \(O(n\log n)\) 且和询问次数没有多大关系。

2021.10.04pm

\(\cal {Made} \ {by} \ {YuGe}\)

上一篇:分布式系统


下一篇:Redhat更换yum源