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

摘要:感觉这个 $T3$ 没 $T2$ 难? 显然是 $SAorSAM$ 。而 $SA$ 虽然码量高但是更好想。 考虑 $SA$ 维护 $f_i$ 表示 $S$ 串的 $suf_i$ 与 $T$ 串的最大长度。可以直接通过 $height$ 数组求得。 则询问 $[l,r]$ 的答案可以写为 $\max\ 阅读全文
posted @ 2020-09-05 17:23 siruiyang_sry 阅读(153) 评论(0) 推荐(0)
摘要:例 $1$ 支持区间乘 $-1$ , 求区间最大子段和。 $lmax,lmin,rmax,rmin,ansmin,ansmax$ 大力维护即可。 时间复杂度 $O(n\log n)$ 。 例 $2$ (楼房重建) 求区间单调栈大小。 考虑线段树维护 $[l,r]$ 单调栈大小。 如何合并节点信息,可 阅读全文
posted @ 2020-08-12 21:42 siruiyang_sry 阅读(64) 评论(0) 推荐(0)
摘要:T1 试题分析 $link$ 考虑形式化的来讲就是将 $r$ 号套圈所对应的人连 $[r,r+d]$ ,求是否有二分图完美匹配。 而这个问题可以用 $Hall$ 定理判断,考虑连续与非连续的表达形式,可以发现连续的表达形式一定强与非连续。那么问题变为了求 $\sum_{i=l}^r X_i\leq 阅读全文
posted @ 2019-12-31 23:44 siruiyang_sry 阅读(202) 评论(0) 推荐(0)
摘要:A. Math Problem $solution:$ 直接找右端点最小值与左端点的最大值做差比较即可,时间复杂度 $O(n)$ 。 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define i 阅读全文
posted @ 2019-11-25 22:12 siruiyang_sry 阅读(217) 评论(0) 推荐(0)
摘要:$CSP\space S$ 格雷码 $solution:$ 直接模拟即可。 时间复杂度 $O(n)$ 。 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; vo 阅读全文
posted @ 2019-11-21 19:38 siruiyang_sry 阅读(315) 评论(0) 推荐(2)
摘要:区间和2 题意简述 $T$ 组数据。 每次给定长度为 $n$ 的序列,$q$ 组询问,每次询问 $l,r$ ,表示询问 $l-r$ 小的区间和。 $T\leq 10,n\leq 2\times 10^5,q\leq 20$。 时间限制 $7s$ $solution:$ 这种题一看就知道会是差分后二分 阅读全文
posted @ 2019-08-08 15:41 siruiyang_sry 阅读(199) 评论(0) 推荐(1)
摘要:link $solution:$ 不知道为什么别人的代码能写的非常短,难道就是写差分的好处? 这种题肯定是算每个众数的贡献,考虑通过暴力众数求出个数。 现在考虑众数 $x$ ,则在序列 $a$ 中将等于 $x$ 的置为 $1$ ,否则置为 $-1$,令为序列 $A$ 。设 $S_i=\sum_{k= 阅读全文
posted @ 2019-07-23 20:12 siruiyang_sry 阅读(313) 评论(0) 推荐(1)
摘要:link $solution:$ 大力线段树即可。 有一个简单做法为在每一个线段树的节点维护一个 $set$ ,线段树存 $x$ 轴, $set$ 维护 $y$ 轴,然后每次暴力取点 $dijkstra$ 即可。 因为线段树上最多 $n\log n$个点,在线段树上取点后还要删除此点,动态维护,不直 阅读全文
posted @ 2019-07-22 16:26 siruiyang_sry 阅读(475) 评论(0) 推荐(1)
摘要:link $solution:$ 考虑二元组 $(S,T)$ 对 $u$ 点的贡献。 若 $S$ 在 $u$ 子树上 ( $T$ 不在),且满足 $dep_u+w_u=dep_S$ 就可以对 $u$ 作贡献。 若 $T$ 在 $u$ 子树上 ( $S$ 不在) ,且满足 $w_u-dep_u=dep 阅读全文
posted @ 2019-07-19 14:55 siruiyang_sry 阅读(159) 评论(0) 推荐(1)
摘要:link $solution:$ 可以发现对区间 $[l,r]$ 排序可以每次只排序 $2$ 个然后冒泡,所以用 $2$ 个和用多个是等价的。 假设现在 $b_1$ 到 $b_{i-1}$ 已经还原,现在考虑 $b_i$ 。 可以发现若存在 $a_j$ 可以与 $b_i$ 配对的条件是 $min\{ 阅读全文
posted @ 2019-07-19 09:24 siruiyang_sry 阅读(327) 评论(7) 推荐(0)
摘要:link $solution:$ 好久没写数据结构了,那就写道简单题吧! 可以发现 $m\leq 50$,所以可以去取在 $[l,r]$ 中当价格相同时愉悦值最高的做完全背包 $dp$ 。 发现修改价格与愉悦值修改操作可以在线段树上维护,只要暴力修改在乱搞一下即可。 时间复杂度 $O(nm\log 阅读全文
posted @ 2019-07-17 22:14 siruiyang_sry 阅读(323) 评论(0) 推荐(0)
摘要:2144: 跳跳棋 Description 跳跳棋是在一条数轴上进行的。棋子只能摆在整点上。每个点不能摆超过一个棋子。我们用跳跳棋来做一个简单的 游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置。我们要通过最少的跳动把他们的位置移动成x,y,z。(棋 子是没有区别的)跳动的规则很简单,任意选一颗棋 阅读全文
posted @ 2019-01-05 10:21 siruiyang_sry 阅读(333) 评论(0) 推荐(0)
摘要:2243: [SDOI2011]染色 Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段), 如“112221”由3段组成:“11”、“222”和“1”。 请 阅读全文
posted @ 2019-01-04 21:10 siruiyang_sry 阅读(191) 评论(0) 推荐(0)
摘要:link 试题分析 一个十分裸的树套树板子(这也是一个板子),线段树中套平衡树($Treap$) 主要就有一个不是平凡操作的,就是处理第$2$个操作时,因为其他操作确保每次复杂度在$O(log^2 n)$,而$2$操作无法快速在$Treap$中找到,所以就可以去二分一个值,用$1$操作判断即可,单次 阅读全文
posted @ 2019-01-03 20:43 siruiyang_sry 阅读(193) 评论(0) 推荐(0)
摘要:link 试题分析 数据结构板子题。其中只需要维护区间覆盖,区间查询的线段树。而这是在一棵树中,所以考虑树链剖分。 然后就真是板子了。 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using na 阅读全文
posted @ 2018-12-20 13:10 siruiyang_sry 阅读(149) 评论(0) 推荐(0)
摘要:link 题目大意 每次找到没有被询问过的第k小的数。共$n$个询问,答案不超过$n$。$(n\leq 10^5)$ 试题分析 其实是一个线段树的板子,然后用一下主席树的思想就行。 #include<iostream> #include<cstdio> #include<cstring> #incl 阅读全文
posted @ 2018-12-18 20:49 siruiyang_sry 阅读(193) 评论(0) 推荐(0)
摘要:link 试题分析 可以容易发现此题维护的是一个数据结构,支持区间加,区间除,区间查询最大值。其实就是在$\log$级复杂度内维护除法操作。 我们发现当除数很大或者此串序列大小差不多时,我们令$a_i$为原来,$b_i$为现在,则对于$[l,r]$中的任意一个数$i$,则出现$a_i-b_i$为恒值 阅读全文
posted @ 2018-12-15 23:55 siruiyang_sry 阅读(469) 评论(0) 推荐(0)
摘要:link 第一次写可持久化线段树,可以很明显的想到二分一个美味度,因为很明显此题具有单调性。 然后就可以随便乱搞了,按照美味度排序,然后按照每升价格建一个可持久化线段树,然后主要是check函数 当我们要判断一个美味度是否可行的时候,我们先可以将其下标得到,然后贪心去先选择价格最小的,然后就是个模拟 阅读全文
posted @ 2018-11-24 16:46 siruiyang_sry 阅读(265) 评论(2) 推荐(0)
摘要:题目 官方题解 T1: 单调栈,单调队列因为认为考场上会写崩所以写了一个十分暴力的方法(线段树) 然后做一做区间覆盖即可 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> 阅读全文
posted @ 2018-11-07 10:10 siruiyang_sry 阅读(146) 评论(0) 推荐(0)
摘要:题目 官方题解 T1: 一道水题 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> #include<stack> using namespace std; inline 阅读全文
posted @ 2018-11-06 13:02 siruiyang_sry 阅读(115) 评论(0) 推荐(0)