上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 39 下一页
摘要: 题目大意:给定一棵 N 个节点的有根树,1 号节点为根节点,叶子节点有点权,每条边有边权,每经过一条边都减去该边权,每经过一个节点都加上该点权,求在保证权值和为非负数的前提下最多能经过多少个叶子节点。 题解:$dp[u][i]$ 表示在以 u 为根节点的子树中,经过 i 个叶子节点的最大权值和,则有 阅读全文
posted @ 2019-02-28 21:41 shellpicker 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 题目大意:静态统计序列区间中出现次数大于等于 2 的颜色数。 题解:类似于 "HH的项链" ,只需将 i 和 pre[i] 的关系对应到 pre[i] 和 pre[pre[i]] 的关系即可。 代码如下 cpp include using namespace std; const int maxn= 阅读全文
posted @ 2019-02-28 16:53 shellpicker 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 题目大意:静态查询序列区间颜色数。 题解:对于一个查询区间 [l , r] ,若有两个相同颜色的点在这个区间中,则总是取下标靠近端点 r 的颜色计入答案贡献。对于每个下标,记录下在这个下标之前,且距离当前下标最近的,且与这个下标对应的颜色相同的下标是多少,即:$min\{j,j using name 阅读全文
posted @ 2019-02-28 16:46 shellpicker 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 题目大意:维护 N M 个点,每个点有三个权值,支持单点修改,查询矩形区间内权值等于某个值的点的个数。 题解:矩阵可以看成两个维度,权值为第三个维度,为一个三维偏序维护问题。发现第三维仅仅为单点修改和单点询问,直接用数组实现最简单,且空间足够。因此,直接建立 100 个二维树状数组,转变成为单点修改 阅读全文
posted @ 2019-02-27 21:25 shellpicker 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定 N 个矩形,求这些矩形的面积并。 题解:采用扫描线算法。 首先,按照矩形的横坐标排序,在纵坐标方向上维护一根扫描线被覆盖的长度,在这里采用线段树维护。统计答案时,从左到右扫描 2N 个 X 坐标,两个坐标之间的扫描线被覆盖的长度相等,因此直接长乘宽计入答案即可。 注意事项 由于坐标不 阅读全文
posted @ 2019-02-27 20:35 shellpicker 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 题目大意:维护一个二维平面,给定若干条线段,支持询问任意整数横坐标处对应的纵坐标最靠上的线段的 id,相同高度取 id 值较小的,强制在线。 题解:初步学习了李超线段树。李超线段树的核心思想在于通过 标记永久化 的方式来维护斜率。 代码如下 阅读全文
posted @ 2019-02-26 00:49 shellpicker 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 题目大意:维护一个集合,支持单点修改、查询小于 X 的数的个数、查询小于 X 的数的和。 题解:学习到了动态开点线段树。对于一棵未经离散化的权值线段树来说,对于静态开点来说,过大的值域会导致不能承受的空间。还可以发现,对于每次修改操作只会涉及一条树链,即:$O(logn)$ 个节点,因此总共所需的空 阅读全文
posted @ 2019-02-25 21:26 shellpicker 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 题目大意:维护一个序列,支持单点修改和查询一段区间能不能组成连续的一段数。 题解:查询区间能不能组成一段连续的数这个操作较为复杂,很难在较小时间复杂度内直接维护。这里采用线段树维护区间哈希的策略,即:维护一些其他的值 间接地去逼近正解 。在这里维护区间最大值、最小值、区间和、区间平方和、区间立方和即 阅读全文
posted @ 2019-02-25 20:04 shellpicker 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 树链剖分的本质是生成 dfs 序的启发式算法。 在对路径进行修改时,需要注意路径两个端点究竟哪个点往上跳,取决于重链头的深度,而不是端点的深度。感性理解的话可以把重链头的深度浅的那条链上更可能是路径的转折点,跳上去了就会导致死循环。 代码如下 cpp include using namespace 阅读全文
posted @ 2019-02-20 19:02 shellpicker 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 题目大意:需要维护一个长度为 N 的数组,支持在历史版本上单点修改和单点查询。 题解:显然,如果直接暴力维护的话会 MLE。因此,采用线段树进行维护,使得空间复杂度由 $O(mn)$ 降至 $O(mlogn)$,不过相应的时间复杂度由 $O(1)$ 上升至 $O(logn)$。 代码如下 cpp i 阅读全文
posted @ 2019-02-20 14:08 shellpicker 阅读(173) 评论(0) 推荐(0) 编辑
上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 39 下一页