随笔分类 - 数据结构-线段树
1
摘要:做法 这里的修改是暂时的 找到一条最短路径$E$,需要考虑的是将最短路径上的边增大 每个点考虑与$1/n$的最短路径在E上前缀/后缀的位置,设$L_i,R_i$ 考虑每条边$(u,v)$,$u$和$v$分别在$E$上连$L$或$R$,相对于一个桥的形状,桥跨过的边则说明不经过那些边的最短路径 考虑是
阅读全文
摘要:做法 单点加单点删,在值域线段树上直接二分就能求值前$K$小的和 Code cpp include typedef long long LL; const LL maxn=1e6+9; inline LL Read(){ LL x(0),f(1); char c=getchar(); while(c
阅读全文
摘要:题目 "洛谷" 做法 本文 "部分" 为 "搬运" 可以发现,如果我需要在转盘上走两圈,不如在第一个物品上停留一段时间,然后再走一圈。 假设我们固定起点,那么一定是走一圈+多出来的一点点。 会发现那多出来的一点点假设走到$x$,那么以$x+1$为起点就可以只走一圈。 所以得到结论:最优方案一定是在第
阅读全文
摘要:题目 "洛谷" 做法 完全把主席树当作线段树维护 有一种经典的办法:二分+变化数列 一个数列中$a[i] using namespace std; typedef long long LL; const LL maxn=1e7; inline LL Read(){ LL x(0),f(1); cha
阅读全文
摘要:题目 "P4309 [TJOI2013]最长上升子序列" 做法 最长上升序列的求法肯定是烂大街了 水题是肯定的,确定出序列的位置然后套个树状数组就好了(强制在线的话改成线段树维护前缀最值也行) 所以说这题其实~~难点~~在与怎么让代码简洁,见识到一个新的$STL$:$rope$ My complet
阅读全文
摘要:题目 "P2605 [ZJOI2010]基站选址" 简化题目:1~n个村庄,每个村庄有范围,要求范围内有村庄被选(不超过$k$个),否则被罚款,选村庄有一定花费,求最小总花费 做法 朴素 $dp_{i,j}$第$j$个被选的村庄为$i$的最小花费:$dp_{i,k}=min\{dp_{j,k 1}+
阅读全文
摘要:题目 "P1438 无聊的数列" 做法 彻底觉得自己傻了,一眼题系列都看不出o(╥﹏╥)o 等差数列直接线段树维护一个差分数组就行了~~无聊的数列~~ My complete code cpp include using namespace std; typedef int LL; const LL
阅读全文
摘要:题目 "P3437 [POI2006]TET Tetris 3D" 做法 一眼就是二维线段树,仔细想想,赋值操作怎么办??$lazy$标记放在一维,下一次又来放个标记二维就冲突了 正解:永久化标记 怎么办不会啊??看了十分钟代码才懂: 区间修改:经过的路径在最大值维护里修改,到了修改的区间把这个懒惰
阅读全文
摘要:题目 P4340 [SHOI2016]随机序列 思维好题 做法 是否觉得水在于你是否发现加减是会抵消的,所以我们只用考虑乘的部分 一块乘只能前面无号(也就是前缀形式)才统计,所以用线段树维护区间前缀乘就行了 My complete code cpp include include include i
阅读全文
摘要:题目 "P3721 [AH2017/HNOI2017]单旋" 毒瘤的$HNOI$,其实想清楚了不难 做法 首先这题不去考虑单纯$splay$的做法,单旋肯定会卡掉,不知道具体卡了多少分 这题是只用单旋,当然去手玩一下,这时候你就知道上旋最小值和最大值的子树变化规律了,线段树维护深度 然后其实就只考虑
阅读全文
摘要:题目 "P4121 [WC2005]双面棋盘" 貌似是刘汝佳出的题目?? 做法 线段树维护并查集 线段树分治$1$~$n$行,我们要考虑维护的肯定是黑、白各自的联通块数量 考虑区间合并,其实就与中间这两层有关,$(n≤200)$并查集暴力做一下就好了 My complete code cpp inc
阅读全文
摘要:题目 "P3313 [SDOI2014]旅行" 码农题╮(╯▽╰)╭ 为了主席树来的,结果发现是个假标签,又折腾了一个多小时,上一次做树剖题是五个月前了 果然还是不熟犯了个 错误(分链处理时往上爬是跳到链头的父亲结点) 想思路(10min)+打代码(20min)+调代码(40min++) 做法 树剖
阅读全文
摘要:题目 "P3506 [POI2010]MOT Monotonicity 2" 第一次切掉没题解的题$qwq$ 做法 首先确定$a_i$的位置后显然就能确定$a_{i+1}$的位置,建一棵权值线段树,维护$$三种情况 考虑确定$a_{i}$的位置 1. 在$[min,a_{i} 1]$中找$$的最大值
阅读全文
摘要:"P2787 语文1(chin1) 理理思维" 第一眼似乎不可做,发现是字符,只有$26$个字母,暴力做一下就行 对于排序,查询每个字母出现次数,再区间一块一块放进去 My complete code include include include include using namespace s
阅读全文
摘要:"P2221 [HAOI2012]高速公路" $n 1$条边,查询点$(l,r)l include include include include using namespace std; typedef long long LL; const LL maxn=1e7+1; inline LL Re
阅读全文
摘要:"P5111 zhtobu3232的线段树" 维护左子树右子树的贡献和跨区间贡献 cpp include using namespace std; typedef long long LL; const LL maxn=10000000; const LL inf=2147483646; const
阅读全文
摘要:[P4891 序列]{https://www.luogu.org/problemnew/show/P4891} 毒瘤线段树 区间维护: $pa:a=b的b积$ $max\_a:最大a$ $min\_b:a include using namespace std; typedef long long
阅读全文
摘要:P3968 [TJOI2014]电源插排 线段树维护最长空区间及左端点位置,这个和$nlongn$的动态最大子序和差不多,就不多解释了 $n$较大哈希优化空间 My complete code:
阅读全文
摘要:P1856 [USACO5.5]矩形周长Picture $len$ $sum$ $num$ $flag\_l$ $flage\_r$分别表示该区间 覆盖长度--整体覆盖次数--覆盖段数--左右端点是否覆盖 将上下边按高度排序不断扫下来 $num$是用来处理高度的 现在来理解一下更新 如果该区间至少覆
阅读全文
摘要:P5105 不强制在线的动态快速排序 $\bigoplus \limits_{i=2}^n (a_i^2-a_{i-1}^2) = \bigoplus \limits_{i=2}^n (a_i-a_{i-1})×(a_i+a_{i-1})$ 关于$l~r$区间,由于$a_i=a_{i-1}+1$ $
阅读全文
1