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

摘要:题目链接 "BZOJ1113" 题解 显然只与高有关,每次选择所有海报中最低的覆盖所有海报,然后分治两边 每个位置会被调用一次,复杂度O(nlogn) upd:智障了,,是一道O(n)普及 贪心模拟题QAQ C++ include include include include incl 阅读全文
posted @ 2018-06-28 10:30 Mychael 阅读(135) 评论(0) 推荐(0) 编辑
摘要:题目链接 "loj2537" 题解 观察题目的式子似乎没有什么意义,我们考虑计算出每一种权值的概率 先离散化一下权值 显然可以设一个dp,设f[i][j]表示i节点权值为j的概率 如果i是叶节点显然 如果i只有一个儿子直接继承即可 如果i有两个儿子,对于儿子x,设另一 阅读全文
posted @ 2018-06-22 19:39 Mychael 阅读(227) 评论(0) 推荐(0) 编辑
摘要:题目链接 "CF600E" 题解 容易想到就是线段树合并,维护每个权值区间出现的最大值以及最大值位置之和即可 对于每个节点合并一下两个子节点的信息 要注意叶子节点信息的合并和非叶节点信息的合并是不一样的 由于合并不比逐个插入复杂度高,所以应是O(nlogn)的 C++ include inclu 阅读全文
posted @ 2018-06-21 20:10 Mychael 阅读(240) 评论(0) 推荐(0) 编辑
摘要:题目链接 "BZOJ2212" 题解 一棵子树内的顺序不影响其与其它子树合并时的答案,这一点与归并排序的思想非常相似 所以我们只需单独处理每个节点的两棵子树所产生的最少逆序对即可 只有两种情况,要么正序要么逆序,且这两种情况数目是互补的 如果左子树大小为Sl,右子树大小为Sr,那么总对数 阅读全文
posted @ 2018-06-20 19:03 Mychael 阅读(127) 评论(0) 推荐(0) 编辑
摘要:题目链接 "CF487E" 题解 圆方树 + 树剖 裸题 建好圆方树维护路径上最小值即可 方点的值为其儿子的最小值,这个用堆维护 为什么只维护儿子?因为这样修改点的时候就只需要修改其父亲的堆 这样充分利用了一对一的特性优化了复杂度 如此询问时如果lca为方点,再询问一下lca的父亲即可 复杂 阅读全文
posted @ 2018-06-20 11:43 Mychael 阅读(163) 评论(0) 推荐(0) 编辑
摘要:题目链接 "洛谷P3759" 题解 树状数组套主席树板题 C++ include include include include include include define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt) define REP(i, 阅读全文
posted @ 2018-05-30 08:52 Mychael 阅读(238) 评论(0) 推荐(0) 编辑
摘要:题目链接 "Mychael vs Kid" 题解 先说说这题的由来及前身 前身 首先有一个很经典的题目: 维护区间加,查询区间gcd 如果强行用线段树维护的话,区间加之后就没法直接确定当前区间的gcd,不可直接维护 这个时候就用到了gcd的一个性质: $$(a,b) = (a b,b)$ 阅读全文
posted @ 2018-05-28 20:12 Mychael 阅读(199) 评论(0) 推荐(0) 编辑
摘要:题目链接 "BZOJ3526" 题解 思来想去,发现很显然可以用线段树维护 每个区间保存所有合法方案的左右端点【当左端点一定是,右端点当然存最小的那个就行了】 这么整的数,11000的概率啊23333 阅读全文
posted @ 2018-05-28 09:39 Mychael 阅读(207) 评论(0) 推荐(0) 编辑
摘要:题目链接 "BZOJ3542" 题解 线段树裸题,,对每一行每一列开线段树 由于坐标很大,用map维护根下标 化一下式子,只用维护区间和,区间平方和,区间存在的个数 C++ include include include include include include define Redge( 阅读全文
posted @ 2018-05-28 08:42 Mychael 阅读(185) 评论(0) 推荐(0) 编辑
摘要:题目链接 "BZOJ3521" 题解 容易想到用前缀和搞 如果我们令p1j1,记前缀和为s[i] 我们就是要找到一段区间[l,r],使得 i[l,r]s[i]s[l1]0 $$\forall i \in [ 阅读全文
posted @ 2018-05-27 11:49 Mychael 阅读(316) 评论(0) 推荐(0) 编辑
摘要:题目链接 "BZOJ3747" 题解 这种找区间最优的问题,一定是枚举一个端点,然后用数据结构维护另一个端点 我们枚举左端点,用线段树维护每个点作为右端点时的答案 当左端点为1时,我们能O(n)预处理出每个位置的答案初始化线段树 当左端点右移一位时,该位上的电影就从区间删除了,记$nxt[i 阅读全文
posted @ 2018-05-26 12:17 Mychael 阅读(242) 评论(0) 推荐(0) 编辑
摘要:题目链接 "BZOJ3922" 题解 考虑暴力,修改O(1),查询O(nd) 考虑线段树,如果对每种差值建一棵线段树,修改O(nlogn),查询O(logn) 能不能均摊? 线段树查询快,修改慢 暴力修改快,查询慢 容易发现当d比较大时暴力还是可以接受的,所以我 阅读全文
posted @ 2018-05-26 09:26 Mychael 阅读(224) 评论(0) 推荐(0) 编辑
摘要:题目链接 "BZOJ4105" 题解 平方操作orz,虽说应该是线段树,但是不会维护啊QAQ 小瞧一眼题解。。。 平方成环?环长lcm小于60? 果然还是打表找规律题。。。。 那就很好做了,先预处理每个数是否在环上,如果当前区间存在数不在环上,就暴力修改 如果当前区间都在环上了,就处理出环, 阅读全文
posted @ 2018-05-25 08:00 Mychael 阅读(210) 评论(0) 推荐(0) 编辑
摘要:题目链接 "BZOJ5011" 题解 一定只有我这种智障会用这么奇怪的方法做这道题。。 由题我们知道最后剩余的一定是一个区间,而且区间内的颜色不存在于区间外 所以我们的目的就是为了找到这样的区间的数量 区间由左右端点确定,我们枚举右端点,尝试维护左端点数量 当我们从右向左枚举到rr右边的颜 阅读全文
posted @ 2018-05-23 22:06 Mychael 阅读(188) 评论(0) 推荐(0) 编辑
摘要:题目链接 "BZOJ1558" 题解 等差数列,当然是差分一下 差分值相同的连续位置形成等差数列,我们所选的两个等差数列之间可以有一个位置舍弃 例如: 1236810 差分后是 11322 左边两个1形成等差,右边两个$2 阅读全文
posted @ 2018-05-22 19:53 Mychael 阅读(183) 评论(0) 推荐(0) 编辑
摘要:题目链接 "BZOJ4869" 题解 这题调得我怀疑人生,,结果就是因为某些地方sb地忘了取模 前置题目: "BZOJ3884" 扩展欧拉定理: cacamodφ(p)+[ap]p(modp) 我们发现当我们进行0操作,就相 阅读全文
posted @ 2018-05-21 15:22 Mychael 阅读(213) 评论(0) 推荐(0) 编辑
摘要:题目链接 "BZOJ3533" 题解 我们设询问的向量为(x0,y0),参与乘积的向量为(x,y) 则有 $$ \begin{aligned} ans &= x_0x + y_0y \\ y &= \frac{x_0}{y_0}x + \frac{ans}{y_0} \\ \end{al 阅读全文
posted @ 2018-05-20 19:29 Mychael 阅读(218) 评论(0) 推荐(0) 编辑
摘要:题目链接 "洛谷P4588" 题解 用线段树维护即可 C++ include include include include include include define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt) define REP(i,n) 阅读全文
posted @ 2018-05-17 12:31 Mychael 阅读(329) 评论(0) 推荐(0) 编辑
摘要:题目链接 "BZOJ1513" 题解 真正地理解了一波线段树标记永久化的姿势 每个节点维护两个值vtag v代表儿子中的最值 tag代表未下传的最值 显然节点的区间大于等于v的实际区间 而tag的区间包含节点的区间 我们在修改的时候,沿路v都要修改,底层tag修改 阅读全文
posted @ 2018-05-17 07:25 Mychael 阅读(329) 评论(0) 推荐(0) 编辑
摘要:题目链接 "POJ2155" 题解 二维线段树水题,蒟蒻本想拿来养生一下 数据结构真的是有毒啊,, ~~TM这题卡常~~ 动态开点线段树会TLE【也不知道为什么】 直接开个二维数组反倒能过 C++ include include include include include include def 阅读全文
posted @ 2018-05-16 21:22 Mychael 阅读(158) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示