
线段树
overcastt
这个作者很懒,什么都没留下…
展开
-
cf474e Pillars(线段树优化dp)
题意有n个柱子,每个柱子有一个高度hihih_i,每个柱子可以跳到它后面高度与它相差大于d的柱子(即|hi−hj|≥d|hi−hj|≥d\left | h_i-h_j \right|\geq d) 求最多可以跳多少个柱子题解ansi=max(ansj+1)(|hi−hj|>=d且j<i)ansi=max(ansj+1)(|hi−hj|>=d且j<i)ans...原创 2018-03-29 19:32:43 · 312 阅读 · 0 评论 -
bzoj4071(UOJ112)【APIO2015】Palembang Bridges (权值线段树)
Problemnnn 个人,住在 AAA 或 BBB 岸,在 AAA 或 BBB 岸上班,距离为坐标相减(如需过河则加一)。 可以修建 k(k<=2)k(k<=2)k(kkkk 只有两种取值,我们分别讨论。k=1k=1k=1 时当我们选择 pospospos 为桥时,所得的结果是 ans=∑i=1nabs(xi−pos)+abs(yi−pos)ans=∑i=1nabs...原创 2018-09-14 18:29:42 · 229 阅读 · 0 评论 -
【51nod 1412】金牌赛事 (线段树优化dp)
problemnnn 条道路每条道路有一个花费,mmm 场比赛,第 iii 场比赛需要用到第 li−rili−ril_i-r_i 条道路,如果这些道路都建立了,可以得到一个花费 问选择其中的一些道路,得到的最大花费是什么题解设 f[i]f[i]f[i] 表示选择选择第 iii 条道路的最大值 因此 f[i]=max(f[j]−cost(j+1,i)+pay(j+1,1))f[i...原创 2018-09-11 07:56:35 · 215 阅读 · 0 评论 -
洛谷 P4188 [USACO18JAN]Lifeguards (线段树)
#Problem给 nnn 个区间,请你删去一个区间,问剩下区间并集最长为多少#Solution线段树维护区间覆盖长度…然后每次删去一个区间看剩下的并集长度,再加上那个这个区间…注意:线段树求区间长度,要把区间定义为左闭右开,这样好做只会插入线段,删去原有线段,因此不需要下放标记什么的updateupdateupdate 时要判断此节点是不是被完全覆盖,而不能直接用左加右。因为没...原创 2018-09-17 20:45:55 · 442 阅读 · 0 评论 -
【51nod 1766】 树上的最远点对 (线段树、lca、rmq)
线段树维护区间最长路径 对于一次合并 (a,b)+(c,d)(a,b)+(c,d)(a,b)+(c,d),若 (a,b)(a,b)(a,b) 中最长线段为 (x1,x2)(x1,x2)(x1,x2) , (c,d)(c,d)(c,d) 中最长线段为 (y1,y2)(y1,y2)(y1,y2) ,那么合并起来最长线段就是 (x1,x2),(x1,y1),(x1,y2),(x2,y1),(x2,...原创 2018-09-10 15:18:56 · 268 阅读 · 0 评论 -
【51Nod 1559】 车和矩形 (线段树)
题意 有一个 n∗mn∗mn*m 的棋盘,其中有 kkk 个点有棋子, qqq 次个矩形。若矩形中每行都有一个棋子或没列都有一个棋子,则为被保护矩形,输出 “YES” ;否则 “NO”题解 可以把所有点、矩形排序,然后扫描线方法判断 线段树记录每列最靠右的点的横坐标 对于一次询问,如果横坐标所在区间纵坐标最小值大于矩形左边界,那么这个矩形能被保护这样操作可以把每行都有一个的情况解决...原创 2018-09-10 15:17:46 · 265 阅读 · 0 评论 -
[HDU 5828] Rikka with Sequence (线段树)
[HDU 5828] Rikka with SequenceU盘丢了不开心…励志以后每道题都要写博客…谁知道下一次什么丢了呢 【再见】题意三个操作:区间加、区间开方、区间求和题解考虑没有区间加怎么做(bzoj3211) 每个数最多开方 6 次,记录这个区间开方了几次,超过6就不做了那么加上区间加的话,这样就会 t 了 然后我们考虑这一个区间数值一样的话,就维护这个一...原创 2018-07-23 22:02:26 · 209 阅读 · 0 评论 -
bzoj1396 识别子串(后缀数组/后缀自动机+线段树)
bzoj1396 识别子串题意:求所有i,使 l≤i≤rl≤i≤rl\leq i\leq r 的子串在字符串中只出现一次的最短子串长度方法:先考虑怎么求出只出现一次的串。 我们可以通过后缀数组,显然从x开始的后缀中最短的就是与前后两个height中最大的一个+1,因为最大的那个使能匹配的最多,那么再加一位显然就不能匹配了 那么这一段的值都可以更新为这个长度,那么用线段树维护就好了。 ...原创 2018-06-16 00:52:05 · 331 阅读 · 0 评论 -
bzoj3110/lg3332:[ZJOI2013]K大数查询 (树套树)
哇真题..真的….线段树套线段树,外层为权值线段树,内层为位置线段树题目是求第k大啊…我为什么..就像成第k小了???怕不是傻子不过呢,这题…因为内层是动态开的…所以…不能pushup、pushdown了….不然会错 因为没有开下去,下放什么的都有问题 所以…在插入操作中,如果正好是这一段,那么就给他的标记+1,在查询个数时每次都要加上标记*区间个数;如果不是的话..要给这一段加上...原创 2018-05-30 21:40:40 · 188 阅读 · 0 评论 -
bzoj3196/lg3380:二逼平衡树(树套树)
唉..树套树真的好难写……这题呢…线段树套平衡树…五个操作:在线段树上找到区间,去找每个区间对应的平衡树中比x小的有多少个这问需要二分诶…二分看结果是不是前面正好有x-1个数比它小就把x所在的所有区间删去a[x]这个数,插入y这个数在线段树找到区间…平衡树找前驱在线段树找到区间…平衡树找后继我真的是…自带常数【哭泣】很是伤心… 一直t…… 最后…在del中..如果是...原创 2018-05-30 00:40:32 · 200 阅读 · 0 评论 -
bzoj1835/lg2605:[ZJOI2010]基站选址 (线段树优化dp)
哇..假的假的…好难…. 为什么…这么多道题..我要先看这道………. 我以为第一道会很和蔼的啊啊啊可怕的..lg2605唉…其实..简单来说就是线段树优化dp….但是…依旧不会啊扎心方程其实也是可以写的 f(i,j)=f(k,j−1)+cost(k+1,i−1)+c[i],f(i,j)f(i,j)=f(k,j−1)+cost(k+1,i−1)+c[i],f(i,j)f(i,j)...原创 2018-05-29 23:49:59 · 142 阅读 · 0 评论 -
线段树练习
目录^_^cf620e: New Year Tree题意题解代码cf384e题意题解代码cf838b Diverging Directions题意题解hdu3974 Assign the task题意题解代码bzoj4034:[HAOI2015]树上操作题解代码cf620e: New Year Tree题意cf620...原创 2018-05-17 20:00:36 · 259 阅读 · 0 评论 -
bzoj3939/lg3120:[USACO15FEB] Cow Hopscotch(动态开点线段树)
题目有n*m的方格,每个方格都有一个的值,要求从左上跳到右下 要求: 1. 跳到的格子必须与上一个格值不相同 2. 必须在上一个格下方 3. 必须在上一个格右方问一共多少种方式跳到右下题解我们能发现,这是个dp dp[i][j]=∑dp[l][k](a[l][k]!=a[i][j]dp[i][j]=∑dp[l][k](a[l][k]!=a[i][j]dp[i][j...原创 2018-04-13 00:10:57 · 201 阅读 · 0 评论 -
bzoj:4653: [Noi2016]区间 (线段树)
题解bzoj4653 首先,我们想到如果某几条(大于m)线段都包含某个点,那么就先排序,然后就可以线性求出最小结果 那我们就把这所以条线段按长度排序 然后一条一条加边,知道有重合出现便记录结果,然后删边… 线段树维护每个点出现过多少次代码#include <cstdio>#include <algorithm>using namespace ...原创 2018-04-01 22:12:32 · 168 阅读 · 0 评论 -
bzoj4552 [HEOI2016/TJOI2016]排序(二分+线段树)
题解哇二分..真厉害! 每次二分一个数,然后把小于x的数当做0,大于的当做1 然后对于每一段,想把它排好序,也就是把1和0排好序,也就是把部分改成1、部分改成0。而这一段里面有几个1就可以区间和解决了。 即如果已经求出这段有cnt个1,升序操作[l,r-cnt]=0,[r-cnt+1,r]=1;降序操作[l,l+cnt-1]=1,[l-cnt,r]=0代码#include &...原创 2018-03-21 21:33:36 · 342 阅读 · 0 评论 -
cf833b:The Bakery(线段树优化dp)
题意cf833b n个数分成k段,求每段中不同数字个数的和的最大值题解dp[i][k]dp[i][k]dp[ i ][ k ]表示前i个数字分成k段的结果 dp[i][k]=max(dp[j][k−1]+num[j+1][i])(1&lt;=j&lt;i)dp[i][k]=max(dp[j][k−1]+num[j+1][i])(1&lt;=j&lt;i)dp[ i ][ k ]...原创 2018-03-29 21:05:42 · 307 阅读 · 0 评论 -
bzoj3306:树(dfn序+线段树+倍增)
Problem支持换根、修改权值的子树最小值查询Solution不考虑换根就是线段树模板题了.. 那么加上换根呢 我们发现换完根,对于原图中大部分子树的最小值是没有关系的 只有 111 到新根上面的点会有变换 新根:为所有点最小值 除新根外此链上的点:除去新根这个外枝的其他所有点…(emmm画个图看一下) 做法就是 dfndfndfn 序建立线段树…倍增找到要除去的部分...原创 2018-09-14 18:30:45 · 370 阅读 · 0 评论