随笔分类 -  数据结构--线段树

摘要:题目 "传送门" Sol 二分+线段树 巧妙啊~~我怎么就没想到~~ 二分答案,把数分类,大于等于$mid$的为$1$,小于的为$0$ 相当于给$01$序列排序,最后判断询问位置上是不是$1$ 线段树+lazy覆盖 阅读全文
posted @ 2018-02-25 15:19 Cyhlnj 阅读(127) 评论(0) 推荐(0)
摘要:题面 "Bzoj" Sol 暴力开根,一个数开根到小于等于$1$就不用管了,维护区间$max$,$max define RG register define IL inline define Fill(a, b) memset(a, b, sizeof(a)) using namespace std 阅读全文
posted @ 2018-02-23 11:50 Cyhlnj 阅读(191) 评论(0) 推荐(1)
摘要:题面 "Bzoj" Sol 做个转化 最开始都是虚边 操作$1$就是$LCT$里的$Access$操作 求的就是路径上虚边的个数+1 然后就好办了 用树链剖分+线段树来维护每个点到根虚边的个数的最大值 操作$1$:$Access$时虚实边的转换,要把原来连的点的$Splay$的最左边的点在原树中的子 阅读全文
posted @ 2018-02-10 10:35 Cyhlnj 阅读(197) 评论(0) 推荐(0)
摘要:题面 "Bzoj" Sol 整体二分 比较经典,练手题 每次的修改会影响一个区间,我用的是线段树覆盖 cpp include define RG register define IL inline define Fill(a, b) memset(a, b, sizeof(a)) using nam 阅读全文
posted @ 2018-02-06 18:30 Cyhlnj 阅读(160) 评论(0) 推荐(0)
摘要:题面 "传送门" Sol 摆定理 $$ a^b\equiv \begin{cases} a^{b\%\phi(p)}~~~~~~~~~~~gcd(a,p)=1\\ a^b~~~~~~~~~~~~~~~~~~gcd(a,p)\neq1,b define RG register define IL in 阅读全文
posted @ 2018-01-19 22:40 Cyhlnj 阅读(175) 评论(0) 推荐(1)
摘要:题面 "传送门" 题解 先来一发很显然的暴力 维护两个数组,一个是子树的val和,一个是子树的val和的平方和 暴力更新,暴力查询就可以获得10分~~吐槽一波luogu的部分分~~ cpp include define RG register define IL inline define Fill 阅读全文
posted @ 2018-01-18 21:22 Cyhlnj 阅读(246) 评论(0) 推荐(0)
摘要:题目 "传送门" Sol 把区间按长度升序排序,双端点+离散化+线段树区间最大值 线段树标记永久化美滋滋 cpp include define RG register define IL inline define Fill(a, b) memset(a, b, sizeof(a)) using n 阅读全文
posted @ 2018-01-17 21:37 Cyhlnj 阅读(130) 评论(0) 推荐(0)
摘要:题面 "戳我" Sol 每个被标记的点只会影响到它的子树,那么直接用线段树在dfn上搞 单点查询,区间修改 cpp include define RG register define IL inline define Fill(a, b) memset(a, b, sizeof(a)) using 阅读全文
posted @ 2018-01-16 14:56 Cyhlnj 阅读(157) 评论(0) 推荐(1)
摘要:题面 "戳我" Sol 把询问反过来,变成加边,先加上边变成一棵树,之后每次加边就相当于去掉这两个点与这条边形成的环的代价,用树剖+线段树覆盖区间即可 cpp include define RG register define IL inline define Fill(a, b) memset(a 阅读全文
posted @ 2018-01-15 08:11 Cyhlnj 阅读(170) 评论(0) 推荐(0)
摘要:题面 "戳我" Sol 和 "bzoj震波" 那道题差不多 加上线段树标记永久化就好了 cpp include define RG register define IL inline define Fill(a, b) memset(a, b, sizeof(a)) using namespace 阅读全文
posted @ 2018-01-13 16:34 Cyhlnj 阅读(301) 评论(0) 推荐(0)
摘要:题面 "戳我" Sol 动态点分治: 建个点分树,每个节点开两颗线段树,以与该点的距离为下标,维护价值和 一棵树维护这个点的,一棵维护对上层重心的贡献 然后。。 然后?直接暴力搞就行了 注意常数优化~~我TLE了一遍,第二遍卡过去的~~ cpp include define RG register 阅读全文
posted @ 2018-01-13 15:44 Cyhlnj 阅读(422) 评论(0) 推荐(0)
摘要:Bzoj权限题 "luogu题面" 先去掉同边的 首先k==1,即求一个点j 使$\sum_{i\in A} |D_i D_j| + \sum_{i\in B} |D_i D_j|$最小 因为两边j是一样的,直接合在一起就好 所以就是$\sum |D_i D_j|$最小 那么j就是的中位数,合在一起 阅读全文
posted @ 2018-01-06 15:46 Cyhlnj 阅读(204) 评论(0) 推荐(0)
摘要:前言 对于树套树,主席树等使用到线段树的比较复杂的数据结构,如果区间修改的话,打标记后pushdown或者pushup是很难做到的~~完全不行吧~~ 所以这个时候,一个神奇的东西诞生了。。。 正题 线段树标记永久化,维护一个标记,假设为cov,再维护一个sum 假设修改区间[ql, qr]全部加上v 阅读全文
posted @ 2018-01-06 09:25 Cyhlnj 阅读(1816) 评论(0) 推荐(4)
摘要:树状数组套线段树(值域线段树)记得离散化 # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) memset(a, b, sizeof(a)) using namespace std 阅读全文
posted @ 2018-01-05 17:27 Cyhlnj 阅读(179) 评论(0) 推荐(0)
摘要:这是一道毒瘤题 只要线段树维护一个矩形的四个点的连通性即可 合并时请想清楚,要大讨论一番 询问有可能存在跨区间的联通情况,只要把询问的区间分成[1,l],[l,r],[r,n]再大讨论一番即可 如果你不想讨论或者讨论出错,你可以使用并查集,每次开并查集更新,这样就不用大讨论一番了,但是会慢,时间几乎 阅读全文
posted @ 2018-01-01 20:16 Cyhlnj 阅读(220) 评论(0) 推荐(0)
摘要:先把问题简化,怎样求一个点x和y的lca的deep和 显然直接求LCA,但是这样的话,要求多个就不好叠加 于是可以用奇技淫巧:先把x到根的所有点打上标记,那么询问y到根的标记的个数即为答案,这样就可以叠加 所以对于询问,拆成[1,l-1], [1, r],排序后依次加点覆盖标记即可 可以用树链剖分+ 阅读全文
posted @ 2017-12-31 20:26 Cyhlnj 阅读(175) 评论(0) 推荐(0)
摘要:树链剖分+线段树 线段树维护max,min,左往右的最大差,右往左的最大差 求LCA时一定要注意方向 # include <bits/stdc++.h> # define RG register # define IL inline # define Fill(a, b) memset(a, b, 阅读全文
posted @ 2017-12-30 17:47 Cyhlnj 阅读(252) 评论(0) 推荐(0)
摘要:动态区间第k小 离散化后 那么每个点开一棵线段树(主席树)再套一个树状数组在外面 每次询问区间内的树的个数时 相当于进行了一次树状数组求区间和的操作,只是是把树状数组那个点看做主席树,对log棵主席树求区间和 然后每次询问,修改时就是把log棵主席树同时跳到儿子,修改也是log棵 时间复杂度O(nl 阅读全文
posted @ 2017-12-23 11:09 Cyhlnj 阅读(224) 评论(0) 推荐(0)
摘要:jzoj snow的追寻 DFS序上搞 合并暴力和,记录最长链和当前最远点,距离跑LCA # include <stdio.h> # include <stdlib.h> # include <iostream> # include <algorithm> # include <string.h> 阅读全文
posted @ 2017-12-09 11:20 Cyhlnj 阅读(306) 评论(0) 推荐(0)
摘要:题意 给定一个区间长度为l,共有t种颜色,o个操作。 C a b x 表示把a到b染成第x种颜色,P a b 表示查询a b间共有几种颜色。 初始状态下所有颜色为1,我就是因为这一点WA了几次 题解 t最大才30,颜色直接二进制压缩即可,不要每次修改a b间所有的点,lazy一下就好了 常数巨大的丑 阅读全文
posted @ 2017-07-21 10:44 Cyhlnj 阅读(137) 评论(0) 推荐(0)