线段树Segment_Tree
linkfqy
A link to FQY.
展开
-
【我可能学了假线段树】【线段树】BZOJ1798 [AHOI2009]Seq 维护序列seq
题面在这里题解之前写的线段树都是数组版的,代码巨长…… 今天试着链式储存线段树,发现极其好用! pushdown,pushup,添加标记等等的操作都可以写成成员函数,代码十分简洁!而且Insert和Query操作都借鉴了ZH神犇的写法,非常省代码 所以说,我以前可能学了假的线段树另外,本题有一个注意点,就是如果一个节点同时拥有两种标记,会有优先级的问题 你不知道到底是先加还是先乘 我们可以原创 2017-04-13 21:33:42 · 808 阅读 · 0 评论 -
【李超线段树】BZOJ3165 [Heoi2013]Segment
题面在这里李超线段树的裸题,不解释示例程序:原创 2017-12-12 21:23:17 · 392 阅读 · 0 评论 -
【贪心+线段树】Codeforces 557C Arthur and Table
题面在这里其实很简单……暴枚最长桌脚的长度ll,然后长度比ll长的桌脚全部都要砍掉长度比ll短的桌脚选择代价前kk小的砍掉用线段树维护……示例程序 :原创 2017-10-25 12:50:01 · 922 阅读 · 0 评论 -
【线段树+Hash】Codeforces 452F Permutation
题面在这里按顺序枚举i,则ai±ka_i\pm k必须在同一侧(即同时出现或同时不出现)维护权值线段树其实就是[ai−k,ai][a_i-k,a_i]和[ai,ai+k][a_i,a_i+k]对称线段树维护正反两个hash值就好了示例程序:原创 2017-10-05 21:25:48 · 665 阅读 · 0 评论 -
【扫描线+贪心+线段树】Codeforces 458C Elections
题面在这里考虑暴枚dd表示所有的对手选票不大于dd那么选票大于dd的对手都需要抢选票,如果这样自己的票数还是不够就从选票小于等于dd的对手哪里抢选票这个可以用线段树维护前K小示例程序:原创 2017-10-24 19:02:30 · 894 阅读 · 0 评论 -
【DFS序+线段树】BZOJ1103 [POI2007]大都市meg
题面在这里很显然可以用DFS序把树上问题转化为区间问题修改一条边只影响了下面那棵子树中所有点的答案线段树维护区间加,单点询问就好了示例程序:原创 2017-09-30 08:05:09 · 725 阅读 · 0 评论 -
【线段树】BZOJ2957 楼房重建
题面在这里通过观察可以发现:能看到的楼房中,最高点与原点连线的斜率一定是递增的所以就是求最长上升序列的长度用线段树维护即可,与BZOJ2770类似示例程序:原创 2017-09-02 14:21:38 · 697 阅读 · 0 评论 -
【线段树,Treap】CodeChef COT5 Count on a Treap
题面在这里这道题很考验对Treap的理解考虑问题时,先把Treap转换成LNR序列,那么就只用考虑节点的权值了 首先发现,Treap中一个节点的father必定是: 向两边找第一个权值比自己大的点 那么显然一个节点的深度可以由 向两边扩展的最长上升序列的长度 得到 我们用线段树维护这个值 具体做法是离线得到所有键值,维护某区间内的最长上升序列的长度 区间询问一发就可以得到一个点的深度原创 2017-08-23 20:47:28 · 1296 阅读 · 0 评论 -
【线段树,Treap】BZOJ2770 YY的Treap
题面在这里没什么好说的,和这道题一样的就是要注意:虽然不会同时出现key与priority但还是有可能有相同的值不同时出现所以不能偷懒用map示例程序:原创 2017-08-27 19:10:48 · 621 阅读 · 0 评论 -
【线段树+Splay】HDU4942 Game on S♂play
题面在这里其实很简单的一道题……因为不管怎么旋转,Splay的中序遍历是永远不会变的所以用一个Splay跟他一起模拟对于每个节点,维护以下信息:子树区间[L,R][L,R]子树和sumsum子树大小sizesize然后每次询问就相当于询问一个区间的乘积,旋转就是修改两个点的值用线段树维护。复杂度O(qlogn)O(qlogn)然而……被卡常了,很不爽……以下代码正确,但不能过,仅供参考:原创 2017-09-03 21:06:18 · 801 阅读 · 0 评论 -
【线段树】BZOJ1012 [JSOI2008]最大数maxnumber
题面在这里又在A水题……这个不用我多说了吧,随便套个什么数据结构就行了示例程序原创 2017-07-17 12:00:17 · 573 阅读 · 0 评论 -
【线段树+均摊思想】UOJ #228 基础数据结构练习题
题面在这里首先吐槽一下这个题目的名字【大雾题目意思很简单,但是需要思考的地方很多主要问题在于如何实现区间开根号 试想:两个不同的数x,y开若干次根号后,必然会趋向于一致: 330 227 →\rightarrow 18 15 →\rightarrow 4 4 那么,在进行若干次操作2后,就有可能得到一段连续的相同值 于是,对于一段相同的序列,区间开根号就等价于区间加 对于不能原创 2017-05-23 15:47:13 · 1478 阅读 · 0 评论 -
【树链剖分+线段树】BZOJ1036 [ZJOI2008]树的统计Count
题面在这里典型的树链剖分……不解释了 不懂的可以看这里#include<cstdio>#include<algorithm>using namespace std;const int maxn=30005,maxe=60005;int n,q;int son[maxe],nxt[maxe],lnk[maxn],tot;void add(int x,int y){ son[++t原创 2017-04-08 20:17:10 · 498 阅读 · 1 评论 -
【二分+线段树】BZOJ4552 [Tjoi2016&Heoi2016]排序
题面在这里首先想到二分然后就可以把整个序列转化成01序列(0比mid小,1比mid大)这样排序的操作就可以用线段树区间覆盖来实现最后判断KK这个位置是0还是1,就完成了二分的验证竟然1A了,好高兴示例程序:原创 2017-12-26 20:33:34 · 542 阅读 · 0 评论