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

摘要:在 dp 问题中,如果发现可以用后缀最大值来进行转移的话可以考虑去查分这个后缀最大值. 这样的话可以用差分的方式来方便地进行维护 ~ #include <bits/stdc++.h> #define N 200007 #define ll long long #define lson t[x].ls 阅读全文
posted @ 2019-12-02 16:25 EM-LGH 阅读(172) 评论(0) 推荐(0)
摘要:读错题了,然后写了一个树上 LIS,应该是对的吧...... code: #include <bits/stdc++.h> #define N 200005 #define LL long long #define setIO(s) freopen(s".in","r",stdin) using n 阅读全文
posted @ 2019-12-02 08:57 EM-LGH 阅读(138) 评论(0) 推荐(0)
摘要:裸题,敲完后没调就过了 ~ code: #include <bits/stdc++.h> using namespace std; #define ll long long #define lson t[x].ls #define rson t[x].rs #define setIO(s) freo 阅读全文
posted @ 2019-11-28 14:24 EM-LGH 阅读(161) 评论(0) 推荐(0)
摘要:最近学了一下线段树分治,感觉还蛮好用... 如果正常动态维护最大生成树的话用 LCT 就行,但是这里还有时间这一维的限制. 所以,我们就把每条边放到以时间为轴的线段树的节点上,然后写一个可撤销 LCT 就好了 ~ code: #include <bits/stdc++.h> #define RM 3 阅读全文
posted @ 2019-11-27 12:21 EM-LGH 阅读(171) 评论(0) 推荐(0)
摘要:感觉这个线段树分治和整体二分几乎相同啊~ code: #include <bits/stdc++.h> #define MAX 100300 #define ll long long #define lson now<<1 #define rson now<<1|1 #define setIO(s) 阅读全文
posted @ 2019-11-27 08:48 EM-LGH 阅读(137) 评论(0) 推荐(0)
摘要:虽然是裸的换根dp,但是为了在联赛前锻炼码力,强行上了点分树+线段树. 写完+调完总共花了不到 $50$ 分钟,感觉还行. code: #include <bits/stdc++.h> #define N 420004 #define LL long long #define setIO(s) fr 阅读全文
posted @ 2019-11-09 16:17 EM-LGH 阅读(161) 评论(0) 推荐(0)
摘要:有两个性质需要知道: $1.$ 对于任意的 $f[i]=f[i-1]+f[i-2]$ 的数列,都有 $f[i]=fib[i-2]\times f[1]+fib[i-1]\times f[2]$ 其中 $fib[i]$ 为第 $i$ 项斐波那契数列. $2$. 对于任意满足上述条件的数列,都有 $\s 阅读全文
posted @ 2019-11-05 14:49 EM-LGH 阅读(193) 评论(0) 推荐(0)
摘要:并不是很难啊,把细节想好了再写就很轻松了~ code: 阅读全文
posted @ 2019-11-01 19:36 EM-LGH 阅读(152) 评论(0) 推荐(0)
摘要:水水的字符串题 ~ 阅读全文
posted @ 2019-10-30 17:19 EM-LGH 阅读(163) 评论(0) 推荐(0)
摘要:线段树维护 dfs 序是显然的. 暴力建 60 个线段树太慢,于是用 bitset 优化就好了 ~ code: 阅读全文
posted @ 2019-10-29 14:34 EM-LGH 阅读(180) 评论(3) 推荐(0)
摘要:维护一个二维零一矩阵(n,m<=1000),支持四种操作(不超过10^5次): 将(i,j)置一 将(i,j)置零 将第i行零一反转yu 回到第K次操作前的状态 每次操作后输出全局一共有多少个一 你发现如果每一次操作都复制一整行的话是可以用 $bitset$ 优化的,自带/32 所以,我们对于每一个 阅读全文
posted @ 2019-10-22 16:02 EM-LGH 阅读(189) 评论(0) 推荐(0)
摘要:考试的时候切的,类似HH的项链~ code: 阅读全文
posted @ 2019-10-11 20:47 EM-LGH 阅读(226) 评论(0) 推荐(1)
摘要:你发现每一次有意义的取模至少会把一个数减半. 所以如果没有赋值操作,每个数最多减半 $log$ 次,复杂度就是 $O(nlog^2n)$ 的. 现在考虑赋值:依次最多只会增加 $O(logn)$ 的时间复杂度,所以复杂度还是 $O(nlog^2n)$ 的. code: 阅读全文
posted @ 2019-09-30 18:31 EM-LGH 阅读(137) 评论(0) 推荐(0)
摘要:Code: #include <bits/stdc++.h> #define N 50001 #define ll long long #define lson now<<1 #define rson now<<1|1 #define inf 1000000000 #define setIO(s) 阅读全文
posted @ 2019-09-29 08:37 EM-LGH 阅读(183) 评论(0) 推荐(0)
摘要:一个数最多是会被开方次数不会很多,所以直接暴力修改即可. 阅读全文
posted @ 2019-09-28 14:39 EM-LGH 阅读(133) 评论(0) 推荐(0)
摘要:联通块个数等于 $n$ 减掉关键边个数. 这里定义关键边为:能连接两个连通块的边. 由于强制在线,我们考虑用一种数据结构维护以 $r$ 为右端点的答案. 考虑已经构建好 $1$ ~ $r-1$ 的图,那么假如 $r$ 时分两种情况: 1. $r$ 连接的两个点没有联通,那么就将这两个点连上. 2. 阅读全文
posted @ 2019-09-25 23:21 EM-LGH 阅读(201) 评论(0) 推荐(0)
摘要:发现对于任意一条边,起决定性作用的是节点编号更大的点. 于是,对于每一条边,按照节点编号较大值作为边权,按照最小生成树的方式插入即可. 最后用线段树维护 dfs 序做一个区间查询即可. Code: 阅读全文
posted @ 2019-09-23 10:18 EM-LGH 阅读(199) 评论(0) 推荐(0)
摘要:复习一下线段树优化建图:1.两颗线段树的叶子节点的编号是公用的. 2.每次连边是要建两个虚拟节点 $p1,p2$ 并在 $p1,p2$ 之间连边. 阅读全文
posted @ 2019-09-18 14:48 EM-LGH 阅读(181) 评论(0) 推荐(0)
摘要:这个就比较简单了~ Code: 阅读全文
posted @ 2019-09-04 07:58 EM-LGH 阅读(206) 评论(0) 推荐(0)
摘要:利用树剖序的一些性质~ 这个题可以出到 $\sum k=10^5$ 左右. 做法很简单:每次暴力跳重链,并在线段树上查询链和. 查询之后打一个标记,把加过的链都置为 $0$.这样的话在同一次询问时即使有重复的也无所谓. 然后本次查询后在线段树的 $1$ 号节点再打一个标记,用来将那些置零的标记清空. 阅读全文
posted @ 2019-09-02 08:44 EM-LGH 阅读(265) 评论(0) 推荐(0)