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\)
- 区间修改,容易想到差分。由于又可以加又可以减,显然最优情况是找差分数组中的一个正数和一个负数进行抵消。进一步就是用所有的正数和负数之和进行抵消,但很有可能有剩余,这时候选择头或者尾进行修改,这样能得到绝对值之差加一种不同的序列。(\(b_1\) 不一样,而其它都是0)
B 绿豆蛙的归宿进阶(逆元)\(\blacktriangle\)
- 可以正推,也可以逆推。
- 正推是长度*概率,逆推直接就是期望。
- 对于逆推,显然有\(ex[u]=\sum (ex[v]+edge[u\to v])/out[u]\)
- 同时由于是有向无环图,为了避免重复访问,自然拓扑排序。
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
题解:
-
\(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)\)
-
再稍作修改,\(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)\)
-
\(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\)
-
维护三个支持单点修改区间查询的数据结构(树状数组)。
D 阿尔塔拉 \(\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\)
题意:
一棵树,1为父亲节点,支持查找两点之间是否有值大于K的点,有多个则输出编号最小的点,同时支持从节点到根区间修改1。 \(m\) 次查询,每次输出\(Ask(x,y)\),并 \(add(y)\)。
题解
- 这道题第一直觉肯定是树剖,但是 \(O(n\log_n^2)\) 会被卡(更别说\(O(n \sqrt n)\)),强制要求 \(O(n\log n)\)。
- \(P.S.\) 这个程序是在阅读”非常潮“的标程之后写出的。
- 有这样一个性质:如果一个点的值大于K,它的父亲的值也肯定大于K,满足递增性。同时,又可以用 \(ST\) 维护区间最小编号,\(O(1)\) 查询。
- 而一个点的值大于K,必然是儿子的操作次数大于K,用树状数组维护前缀和,查询子树大小。
- 但这样时间复杂度还是有问题。我们需要在 \(add\) 的同时更新子树。而从下往上修改复杂度还是 \(\log\) 显然该T还是T,得要从第一个没有破坏的点往下更新。这需要提前找到每个点的儿子,以找到从根到该点的路径。在 dfn 序中,显然有 \(dfn[son_1]<dfn[son_{{son}_1}]<dfn[son_2]\),所以可以二分来查找,同时打上标记,这样时间复杂度是均摊 \(O(n\log n)\) 且和询问次数没有多大关系。
\(\cal {Made} \ {by} \ {YuGe}\)