11 2018 档案

树链剖分总结(一)线段树维护
摘要:两天复习了下树链剖分 用线段树可以很方便的维护树链剖分后的每一条重链 学习的博客链接 https://blog.csdn.net/cdy1206473601/article/details/79189553 kuangbin推荐的 http://blog.sina.com.cn/s/blog_7a1 阅读全文

posted @ 2018-11-30 18:10 zsben 阅读(126) 评论(0) 推荐(0) 编辑

bzoj2243树链剖分+区间合并
摘要:树链上区间合并的问题比区间修改要复杂,因为每一条重链在线段树上分布一般都是不连续的,所以在进行链上操作时要手动将其合并起来,维护两个端点值 处理时的方向问题:lca->u是一个方向,lca->v是另一个方向,到最后合并这两个放向时都看左端点即可 阅读全文

posted @ 2018-11-30 18:05 zsben 阅读(145) 评论(0) 推荐(0) 编辑

bzoj1036点权模板题
摘要:/* HYSBZ1036 树上有1-n个结点,每个节点都有一个权值w 操作 CHANGE u t:把结点u的权值改为t QMAX u v:询问从点u到v的路径上的节点的最大权值 QSUM u v:询问从点u到v的路径上的结点的权值和 从点u到点v路径上的结点包括u,v本身 */ #include #include #include #include #define MAX... 阅读全文

posted @ 2018-11-30 17:01 zsben 阅读(124) 评论(0) 推荐(0) 编辑

poj3237树链剖分边权+区间取负
摘要:树链剖分+线段树lazy-tag在树链上操作时千万不要写错。。 阅读全文

posted @ 2018-11-30 10:22 zsben 阅读(114) 评论(0) 推荐(0) 编辑

poj2763树链剖分边权+区间和
摘要:自己写的比原来的板子常数小了不少嘻嘻,边权处理起来比点权要复杂一下 由于根节点没有被映射的边,其被访问到的顺序是0,直接排除在线段树外 阅读全文

posted @ 2018-11-29 22:17 zsben 阅读(119) 评论(0) 推荐(0) 编辑

hdu3966 树链剖分点权模板+线段树区间更新/树状数组区间更新单点查询
摘要:点权树的模板题,另外发现树状数组也是可以区间更新的。。 注意在对链进行操作时方向不要搞错 线段树版本 树状数组版本。。果然还是树状数组快一点啊 阅读全文

posted @ 2018-11-29 19:38 zsben 阅读(132) 评论(0) 推荐(0) 编辑

树链剖分边权模板spoj375
摘要:树链剖分是树分解成多条链来解决树上两点之间的路径上的问题 如何求出树链:第一次dfs求出树上每个结点的大小和深度和最大的儿子,第二次dfs就能将最大的儿子串起来并hash(映射)到线段树上(或者其他数据结构上),这就是一条重链。 一些性质:1.在树链上进行的算法要额外乘以一个logn:因为找u,v的 阅读全文

posted @ 2018-11-29 16:35 zsben 阅读(167) 评论(0) 推荐(0) 编辑

hdu3486 ST表区间最值+二分
摘要:还是挺简单的,但是区间处理的时候要注意一下 阅读全文

posted @ 2018-11-28 16:35 zsben 阅读(127) 评论(0) 推荐(0) 编辑

poj2019 二维RMQ模板题
摘要:和hdu2888基本上一样的,也是求一个矩阵内的极值 阅读全文

posted @ 2018-11-28 13:16 zsben 阅读(214) 评论(0) 推荐(0) 编辑

hdu2888 二维ST表(RMQ)
摘要:二维RMQ其实和一维差不太多,但是dp时要用四维 阅读全文

posted @ 2018-11-27 22:37 zsben 阅读(369) 评论(0) 推荐(0) 编辑

poj3728 倍增法lca 好题!
摘要:lca的好题!网上用st表和离线解的比较多,用树上倍增也是可以做的 不知道错在哪里,等刷完了这个专题再回来看 题解链接https://blog.csdn.net/Sd_Invol/article/details/9572423 阅读全文

posted @ 2018-11-27 19:58 zsben 阅读(213) 评论(0) 推荐(0) 编辑

cf689d ST表RMQ+二分
摘要:类似hdu5289,但是二分更复杂。本题枚举左端点,右端点是一个区间,需要二分找到区间的左端点和右端点(自己手动模拟一次),然后区间长度就是结果增加的次数 另外结果开long long 保存 阅读全文

posted @ 2018-11-26 22:03 zsben 阅读(185) 评论(0) 推荐(0) 编辑

hdu5289 ST表+二分
摘要:用裸的St表+暴力枚举查询时稳TLE的,可以枚举每个区间的起点+二分满足条件的区间右端,这样复杂度是O(nlogn) 阅读全文

posted @ 2018-11-26 18:39 zsben 阅读(173) 评论(0) 推荐(0) 编辑

hdu5443 ST表裸题:求区间最大
摘要:#include #include #include #include #define maxn 1005 using namespace std; int a[maxn],mx[maxn][20]; int n,q,T,l,r; void ST(){ for(int i=1;i<=n;i++) mx[i][0]=a[i]; for(int j=1;(1<<j)<=n;j++)... 阅读全文

posted @ 2018-11-26 16:33 zsben 阅读(191) 评论(0) 推荐(0) 编辑

poj3264 倍增法(ST表)裸题
摘要:打出st表的步骤:1:建立初始状态,2:区间按2的幂从小到大求出值 3:查询时按块查找即可 阅读全文

posted @ 2018-11-26 12:37 zsben 阅读(232) 评论(0) 推荐(0) 编辑

cf932d 树上倍增
摘要:题解链接 https://blog.csdn.net/my_sunshine26/article/details/79338601 感觉能做,但是倍增还不是很熟悉,回头再补 阅读全文

posted @ 2018-11-26 11:27 zsben 阅读(155) 评论(0) 推荐(0) 编辑

zoj3195 联通树上三个点的路径长
摘要:输出有个坑,两个月之前就没对,,今天又被坑了一次 求联通树上三个点的路径长度,只要求两两点对的最短路径,加起来除以二即可 阅读全文

posted @ 2018-11-25 20:22 zsben 阅读(132) 评论(0) 推荐(0) 编辑

hdu6107 倍增法st表
摘要:发现lca的倍增解法和st表差不多。。原理都是一样的 阅读全文

posted @ 2018-11-25 17:35 zsben 阅读(194) 评论(0) 推荐(0) 编辑

hdu2586 lca倍增法
摘要:倍增法加了边的权值,bfs的时候顺便把每个点深度求出来即可 阅读全文

posted @ 2018-11-25 13:22 zsben 阅读(160) 评论(0) 推荐(0) 编辑

poj1470 LCA倍增法
摘要:倍增法模板题 阅读全文

posted @ 2018-11-25 12:16 zsben 阅读(136) 评论(0) 推荐(0) 编辑

hdu3436 splaytree树模拟队列+离散化缩点
摘要:数据较大,需要先把每个top不会操作到的段缩成一个点,记录其开始和结束的位置,和top能操作到的点一起建立一颗伸展树模拟 然后就是普通的队列模拟操作 阅读全文

posted @ 2018-11-23 10:56 zsben 阅读(165) 评论(0) 推荐(0) 编辑

Splay-Tree总结一:模拟队列
摘要:伸展树是一种强大的数据结构,由于其特性,可以很好地模拟队列的插队等操作,而线段树解决这类问题通常需要转化一下,比较伤脑筋 而用伸展树的解决方法就是先建好一颗节点数等于队列长度的树,每个队列元素在队列中的排名就是这个元素在伸展树中的结点号 那么询问 i 在队列中的排名:splay(i,0), rank 阅读全文

posted @ 2018-11-23 10:56 zsben 阅读(113) 评论(0) 推荐(0) 编辑

bzoj1208splay模板题
摘要:想试下新找的板子,没想到交上去CE了。。懒得调。。以后有机会就改 阅读全文

posted @ 2018-11-22 20:05 zsben 阅读(211) 评论(0) 推荐(0) 编辑

splay好板子
摘要:找到一份比较好的板子,链接https://blog.csdn.net/crazy_ac/article/details/8034190 阅读全文

posted @ 2018-11-22 20:00 zsben 阅读(263) 评论(0) 推荐(0) 编辑

hdu1890 splay维护区间翻转
摘要:这题的建模有点不太一样,是按结点横坐标赋予键值的 同时每次rotate和splay时都要注意下往上往下更新 阅读全文

posted @ 2018-11-21 22:10 zsben 阅读(195) 评论(0) 推荐(0) 编辑

hdu1754splaytree区间查询
摘要:以前用线段树做的题。。发现splay好神奇 splay的区间查询就是把那个区间移到两个节点之间进行操作即可,同时每次rotate不要忘记pushup 阅读全文

posted @ 2018-11-21 16:40 zsben 阅读(169) 评论(0) 推荐(0) 编辑

poj2828 伸展树模拟
摘要:用伸展树模拟插队比线段树快乐3倍。。 但是pojT了。别的oj可以过,直接贴代码. 每次更新时,找到第pos个人,splay到根,然后作为新root的左子树即可 阅读全文

posted @ 2018-11-21 12:26 zsben 阅读(244) 评论(0) 推荐(0) 编辑

poj3481 splaytree模板题
摘要:找不到错在哪里,先留着吧 终于过了:和上面做法有些不同,找到最大或最小的点,将其作为根,同时将前驱后缀提取出来当做子树 阅读全文

posted @ 2018-11-20 22:59 zsben 阅读(182) 评论(0) 推荐(0) 编辑

bzoj营业额统计
摘要:/* 插入,求前驱和后继 */ #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; #define MAXN 1000000 int ch[MAXN][2],f[ 阅读全文

posted @ 2018-11-19 18:50 zsben 阅读(179) 评论(0) 推荐(0) 编辑

bzoj3224 splay板子
摘要:开始学习新知识:splay——tree 是个板子题,学习splay可以看博客 https://blog.csdn.net/Clove_unique/article/details/50630280 阅读全文

posted @ 2018-11-19 12:44 zsben 阅读(184) 评论(0) 推荐(0) 编辑

hdu1540
摘要:怎么会T啊 ac代码 阅读全文

posted @ 2018-11-18 21:32 zsben 阅读(206) 评论(0) 推荐(0) 编辑

cf 1041C双指针
摘要:比赛的时候想着用单调队列做。。。 打完发现其实就是个双指针 阅读全文

posted @ 2018-11-18 20:25 zsben 阅读(229) 评论(0) 推荐(0) 编辑

poj3667 区间合并,找最左边的空余块
摘要:题很简单:给两个操作1:查找最左边的a个空余块并填满 2:把从第a个开始的连续b个块置空 线段树维护左连续,右连续,最大连续,lazy-tag即可,query函数值得学习 阅读全文

posted @ 2018-11-18 10:38 zsben 阅读(124) 评论(0) 推荐(0) 编辑

hdu3397区间覆盖,区间翻转,区间合并,区间求和
摘要:调了很久的代码。。注意区间翻转和覆盖的操作互相的影响 阅读全文

posted @ 2018-11-17 22:04 zsben 阅读(240) 评论(0) 推荐(0) 编辑

hdu3308
摘要:区间合并比较模板的题,就是求一个区间的LCIS 线段树维护左最大LCIS,右最大LCIS,区间LCIS 看代码就行 阅读全文

posted @ 2018-11-16 21:10 zsben 阅读(89) 评论(0) 推荐(0) 编辑

hdu4419
摘要:对于这类面积覆盖的题,大致就两点要注意的 1.同一把矩形放在笛卡尔坐标系上做 2.pushup函数要注意下细节:及在统计子区间和之前要先判断是否有子区间 用sum数组来保存区间被覆盖的情况,如果遇到多次覆盖问题,那就开多个sum数组分别保存被覆盖n次的情况 用cnt数组保存区间被完全覆盖的次数,如果 阅读全文

posted @ 2018-11-16 11:03 zsben 阅读(168) 评论(0) 推荐(0) 编辑

hdu4052矩形面积并
摘要:建模需要注意下细节,,这是做扫描线的惯例,就是最好把模型建立在笛卡尔坐标系上 剩下的看链接和注释https://blog.csdn.net/shiqi_614/article/details/7983508 阅读全文

posted @ 2018-11-15 21:52 zsben 阅读(185) 评论(0) 推荐(0) 编辑

uva11983扫描线k次覆盖
摘要:自己做的是从下往上扫描的,一直wa,不知道坑在哪里。。但是作为模板。我还是找了份不错的ac代码 阅读全文

posted @ 2018-11-15 16:37 zsben 阅读(248) 评论(0) 推荐(0) 编辑

hdu3255扫描线:带权面积交转体积交
摘要:手贱把i打成j,调了半天 阅读全文

posted @ 2018-11-14 22:13 zsben 阅读(152) 评论(0) 推荐(0) 编辑

hdu4578线段树区间更新
摘要:/* 只有在区间中的数字不相同时才pushdown:往子区间传递数字再到子区间更新,同时该区间的flag置0 更新完左右子区间后进行pushup,如果左右子区间数字相同,那么把子区间合并,子区间数字置0 */ #include #include #include using namespace std; #define ll long long #define mod 10007 #defin... 阅读全文

posted @ 2018-11-14 16:04 zsben 阅读(108) 评论(0) 推荐(0) 编辑

poj2464扫描线好题,回头再做
摘要:扫描线+区间更新 题解 阅读全文

posted @ 2018-11-14 16:03 zsben 阅读(217) 评论(0) 推荐(0) 编辑

poj12482 扫描线+lazy-tag
摘要:采用扫描线的思想,其实是区间更新的题目 题解链接https://blog.csdn.net/shiqi_614/article/details/7819232 注意处理细节:1)因为边框上的点不算,所以要当出边入边重合时,要先更新出边,再更新入边 2)同理,在y轴上建立的线段树应该把坐标离散成互不相 阅读全文

posted @ 2018-11-13 18:16 zsben 阅读(177) 评论(0) 推荐(0) 编辑

hdu3642扫描线 长方体
摘要:立方体交,自己写的莫名其妙MLE了,不知道为什么 kuangbin的板子是可以过的。。 阅读全文

posted @ 2018-11-12 20:48 zsben 阅读(211) 评论(0) 推荐(0) 编辑

hdu1255扫描线计算覆盖两次面积
摘要:总体来说也是个模板题,但是要开两个线段树来保存被覆盖一次,两次的面积 阅读全文

posted @ 2018-11-12 10:34 zsben 阅读(151) 评论(0) 推荐(0) 编辑

hdu1828 扫描线计算周长
摘要:和扫描线计算面积差不多,新加了lbd,rbd线段树来标记区间的左右两侧是否被填充(左右边界是否存在),numbd线段树统计区间有多少边 阅读全文

posted @ 2018-11-11 21:26 zsben 阅读(194) 评论(0) 推荐(0) 编辑

poj1511,线段树扫描线面积
摘要:经典题,线段树扫描线其实类似区间更新,一般的做法是想象一根扫描线从上扫到下或者从左扫到右,本题的做法是从上扫到下 只要扫到了一根水平线,就将其更新到线段树对应区间中,区间和它的子区间是独立更新的 阅读全文

posted @ 2018-11-10 23:12 zsben 阅读(160) 评论(0) 推荐(0) 编辑

ural1855 线段树区间更新+推公式维护一元二次式
摘要:和威威猫系列故事差不多,都是根据条件推出公式 阅读全文

posted @ 2018-11-09 20:39 zsben 阅读(175) 评论(0) 推荐(0) 编辑

hdu4533 线段树维护分段函数
摘要:更新:x1,y1,x2,y2不用long long 会wa。。 wa了,为什么呢 阅读全文

posted @ 2018-11-08 22:58 zsben 阅读(299) 评论(0) 推荐(0) 编辑

zoj3299 线段树区间更新,坐标建立线段树的方式
摘要:碰到区间更新最头痛的就是坐标的离散化,所以上面的代码挂了 网上看题解,线段树有直接维护坐标的办法,但是维护方式和普通的区间更新略有不同 同时换了种比较容易懂的思路 阅读全文

posted @ 2018-11-08 16:07 zsben 阅读(189) 评论(0) 推荐(0) 编辑

cf276E 两棵线段树分别维护dfs序和bfs序,好题回头再做
摘要:搞了一晚上,错了,以后回头再来看 阅读全文

posted @ 2018-11-07 22:35 zsben 阅读(181) 评论(0) 推荐(0) 编辑

uva12436 回头再做一次
摘要:线段树维护等差数列,结点维护首项+公差即可 阅读全文

posted @ 2018-11-07 19:10 zsben 阅读(214) 评论(0) 推荐(0) 编辑

cf220B莫队
摘要:用莫队比直接做快了很多。。 阅读全文

posted @ 2018-11-06 22:37 zsben 阅读(198) 评论(0) 推荐(0) 编辑

cf220b
摘要:不知道为什么线段树区间更新专题里有这题。。 可以用莫队解,也可以直接开数组解 阅读全文

posted @ 2018-11-06 20:09 zsben 阅读(147) 评论(0) 推荐(0) 编辑

poj1436水平可见线
摘要:还是线段树区间更新,这次不需要对线段离散化,但是要把线段纵坐标*2,可以举例模拟 阅读全文

posted @ 2018-11-06 13:54 zsben 阅读(175) 评论(0) 推荐(0) 编辑

poj2528贴海报,,
摘要:对于区间段的离散化需要注意一下,和点离散化不同 离散后如何识别一段区间还是一段区间,而不是两个顶点,就是如果两个点的距离大于1,就往离散的数据里插入一个中间值,即用三个点来表示一段区间 阅读全文

posted @ 2018-11-05 20:33 zsben 阅读(149) 评论(0) 推荐(0) 编辑

poj3468
摘要:#include #include #include using namespace std; #define lson l,m,rt>1))*lazy[rt]; sum[rt>1)*lazy[rt]; lazy[rt]=0; } } void build(int l,int r,int rt){ lazy[rt]=0; if(l==r){... 阅读全文

posted @ 2018-11-05 17:01 zsben 阅读(102) 评论(0) 推荐(0) 编辑

hdu1698
摘要:/*区间更新*/#include #include using namespace std; #define lson l , m , rt > 1)) * col[rt]; sum[rt> 1) * col[rt]; col[rt] = 0; } } void build(int l,int r,int ... 阅读全文

posted @ 2018-11-05 16:14 zsben 阅读(90) 评论(0) 推荐(0) 编辑

ural1989 单点更新+字符串hash
摘要:正解是双哈希,不过一次哈希也能解决。。 然后某个数字就对应一个字符串,虽然有些不同串对应同一个数字,但是概率非常小,可以忽略不计。从左到右、从右到左进行两次hash,如果是回文串,那么对应的整数必定存在某种关系(可以理解成相等),对于更新操作,就是单点更新。 阅读全文

posted @ 2018-11-04 21:26 zsben 阅读(171) 评论(0) 推荐(0) 编辑

cf Queries on a String
摘要:#include<iostream> #include<cstring> #include<cstdio> using namespace std; #define maxn 200005 char s[maxn]; int nxt[maxn][27],ans[maxn],t[maxn]; int 阅读全文

posted @ 2018-11-04 17:57 zsben 阅读(177) 评论(0) 推荐(0) 编辑

hdu4605
摘要:两颗线段树,分别维护向左走向右走的情况 线段树的结点维护区间有多少点被路径经过了 离线读入所有询问,dfs遍历树的每一个结点,访问到v时解决对v的所有查询,在dfs过程中只需要维护根节点到v的链,线段树查询链上有多少结点值大于或小于询问的x,即能求出到达x的概率 阅读全文

posted @ 2018-11-04 11:43 zsben 阅读(105) 评论(0) 推荐(0) 编辑

codeforce 139E
摘要:成段更新+离散化才能过,数据好强。。 单点更新挂在了test27,下次做到成段更新再来做! 阅读全文

posted @ 2018-11-03 20:31 zsben 阅读(140) 评论(0) 推荐(0) 编辑

线段树单点更新+离线
摘要:cf19d 离散化+set 阅读全文

posted @ 2018-11-02 22:43 zsben 阅读(131) 评论(0) 推荐(0) 编辑

线段树单点更新解插空问题
摘要:poj2828 线段树维护区间空余的位置,每次插入一个点 hdu3564 线段树解决插值,求出最终序列,再求lis 阅读全文

posted @ 2018-11-02 22:34 zsben 阅读(194) 评论(0) 推荐(0) 编辑

线段树解LIS
摘要:先是nlogn的LIS解法 线段树解LIS hdu4521 求间隔为d的lis 阅读全文

posted @ 2018-11-01 23:11 zsben 阅读(426) 评论(0) 推荐(0) 编辑

导航

统计

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