10 10
-
P4169 cdq分治
- 有时间戳,可以转换为四个方向的带时间戳的二维偏序
- 故可以用 cdq 分治解决,
- 然后发现我TLE了故需要使用归并排序来优化常数
-
p4197 线段树合并
- 很容易可以发现可以把询问离线下来,按照可走道路权值从小到大排序
- 用并查集维护哪些点是可以互相到达的,用权值线段树维护某个连通块中所有的点的权值
- 并查集合并的时候线段树也合并即可
-
p3206 cdq分治的另一种应用
- 我们对于区间 \([l,r]\)
- 可以把 \([l,r]\) 的边的边权设为 -inf,跑一遍最小生成树 mst 故加入进去的边即为在这个区间内查询最小生成树边权和的必选边
- 可以把 \([l,r]\) 的边的边权设为 inf,跑一遍最小生成树 mst 故未加入进去的边即为在这个区间内查询最小生成树边权和的永远不会选的边
- 对于必选边我们进行缩点,对于永远不会选的边我们把它删去
- 递归处理左区间,递归处理右区间
- 把 \([l,r]\) 的边权修改操作做完,并回溯我们的缩点与删边操作
- 一道非常shit的码力题
- 我们对于区间 \([l,r]\)
-
p4093
- 我们可以很容易列出 \(f_i = \max(f_j) + 1\) 其中 \(max_{a_j} <= a_i,a_j <= min_{a_i}\)
- 我们可以令下标为 x 轴,值为 y 轴,max,min 分配一个时间戳
- 然后进行 cdq 分治优化转移即可
-
P3122
- 我们可以把直线解析式转化为 \(y = \frac{-a}{b} \cdot x + \frac{c}{b}\)
- 合法等价于最大的 \(y_j - \frac{a_i}{b_i} \cdot x_j + \frac{c_i}{b_i} < 0\) ,最小的 \(y_j - \frac{a_i}{b_i} \cdot x_j + \frac{c_i}{b_i} > 0\) 满足其一
- 接下来分治用 \([l,mid]\) 建出上/下凸包来更新 \([mid+1,r]\) 区间的答案即可