随笔分类 -  线段树

摘要:"传送门" 之前那道题的数据加强版,用线段树合并卡了很多次都过不去,很伤。 原因还是线段树合并时间常数太大了,这题可以dfs序+树状数组过的,常数就小很多了。 阅读全文
posted @ 2020-04-10 16:54 BakaCirno 阅读(189) 评论(0) 推荐(0)
摘要:"传送门" 之前用 dsu on tree 搞过一次,这次试着用线段树合并来做,尝试了一下内存回收,基本可以把空间压到 $O(n)$。不错不错。 把询问用向前星来存,速度和空间都比用 vector 存好一些。 这道题的做法也是先把询问离线,然后每个点建以深度为权值的线段树,先 dfs,然后回溯的时候 阅读全文
posted @ 2020-04-10 15:05 BakaCirno 阅读(215) 评论(0) 推荐(0)
摘要:"传送门" 这道题考察了对线段树合并的理解程度,在合并线段树的过程中就可以计算逆序对。 阅读全文
posted @ 2020-04-10 13:24 BakaCirno 阅读(143) 评论(0) 推荐(0)
摘要:"传送门" 之前用树上启发式合并做过一次,这次再用线段树合并搞一次。 可以发现线段树合并比启发式合并好写,但是性能是真的不敢恭维。 阅读全文
posted @ 2020-04-10 11:52 BakaCirno 阅读(120) 评论(0) 推荐(0)
摘要:"传送门" 离散化+线段树合并。 对能力离散化,然后dfs,用线段树合并统计每一颗子树。 阅读全文
posted @ 2020-04-10 11:22 BakaCirno 阅读(149) 评论(0) 推荐(0)
摘要:"传送门" 线段树合并板子题,但是好像用树链剖分和树上启发式合并都能做,之后再想想吧。 其实写过之后才知道,线段树合并这个操作和fhqtreap的合并很像,基本能在时间复杂度 $O(logn)$ 里做到。 要注意的是,线段树合并虽然时空复杂度理论都是 $nlogn$,但是时空常数都是巨大,空间一般要 阅读全文
posted @ 2020-04-10 10:52 BakaCirno 阅读(232) 评论(0) 推荐(0)
摘要:"传送门" 题意 给出一棵 $n$ 个结点的树,每个结点有一个颜色 $c_i$ 。 询问 $q$ 次,每次询问以 $v$ 结点为根的子树中,出现次数 $\ge k$ 的颜色有多少种。树的根节点是 $1$。 题解 反正我看见这个 $\ge k$ 就觉得要用线段树,实际上好像不用写线段树的 Orz。 还 阅读全文
posted @ 2020-04-01 14:17 BakaCirno 阅读(143) 评论(0) 推荐(0)
摘要:这套题真的有点传奇了,考了两次。虽然银川赛区名声不行,但这套题质量还是过硬的,所以来补一下,还是收获颇丰。 A. Maximum Element In A Stack 题意 实现一个支持查询当前栈中元素的最大值的栈。 题解 最大栈的模板题,相当于在原始栈的基础上再开一个栈存前缀最大值,pop操作与原 阅读全文
posted @ 2020-03-18 21:13 BakaCirno 阅读(189) 评论(0) 推荐(0)
摘要:"传送门" 补这道题的契机是因为烂桥杯2013的最后一题,虽然那道题暴力也能过,但看到大佬介绍的线段树做法,感觉又刷新了我对于线段树的认识,~~果然线段树是无所不能的~~。 题意 给你一个 $n$ 的全排列 $A$,你可以从中选两个不重合的区间,如果这两个区间里的所有数按升序排列是一个公差为 $1$ 阅读全文
posted @ 2020-03-12 01:35 BakaCirno 阅读(193) 评论(0) 推荐(0)
摘要:"传送门" 题意 给数列 $p_1,p_2,...,p_n$,并随时修改,要求在每次修改之后,回答: 将原数列单调非递减排序形成 $a_1,a_2,...,a_n$,计算 $$\frac{\sum_{i=1}^{n 1}\sum_{j=i+1}^{n}a_i\times a_j\times 2^{n 阅读全文
posted @ 2020-03-06 01:56 BakaCirno 阅读(174) 评论(0) 推荐(0)
摘要:"传送门" 题意 给 $a_1,a_2,...,a_n$,$b_1,b_2,...,b_m$,$(x_1,y_1,w_1),(x_2,y_2,w_2),...,(x_p,y_p,w_p)$, 问 $$\max_{1\le i\le n,1\le j\le m}\{\sum_{x_k include 阅读全文
posted @ 2020-03-04 13:58 BakaCirno 阅读(175) 评论(0) 推荐(0)
摘要:"传送门" 思路 其实可以维护两棵线段树,一颗维护区间k的乘积,一颗维护区间的结果,可以推一下公式解决。 但更方便的使用一颗线段树直接维护矩阵的乘积。 因为 $f_2(f_1(x))=k_1k_2x+b_1k_2+b_2$ 根据矩阵乘法: $$ \left[ \begin{matrix} 1 & 1 阅读全文
posted @ 2020-02-06 20:53 BakaCirno 阅读(245) 评论(0) 推荐(0)