随笔分类 -  数据结构

摘要:分块吼啊 学习笔记——分块 ~~之前一直不会写分块。~~ 咕到了今天终于写了几个裸题 "LOJ数列分块入门1" 区间加,单点查 线段树很容易,但是要练分块~~更容易~~ 把数列分成$\sqrt{n}$的块 整块的打$tag$两边的暴力 代码如下: 阅读全文
posted @ 2019-11-04 18:52 ChrisKKK 阅读(180) 评论(0) 推荐(0)
摘要:「雅礼集训 2017 Day1」市场 线段树维护除法下取整 "链接" 区间最小值,区间和,区间加,区间除下取整 除数巨大,不好维护 但是可以用一种方法改为做区间减法 $1,1,2,2$这个序列除以$2$下取整为$0,0,1,1$ $2,2,3,3$除以$3$结果$0,0,1,1$ 第一个相当于区间减 阅读全文
posted @ 2019-10-29 11:30 ChrisKKK 阅读(282) 评论(0) 推荐(0)
摘要:CF413E Maze 2D 线段树 "题目" 宽度只有$1$的话怎么做? 用线段树维护一下$dis$表示$l r$区间的距离 那么宽度为$2$的也一样啊 就可以设四个距离 表示左上到右上,左上到右下,左下到右上,左下到右下 这样就可以查询了 阅读全文
posted @ 2019-10-26 17:16 ChrisKKK 阅读(221) 评论(0) 推荐(0)
摘要:CF786B Legacy 线段树优化建图 "Luogu链接" 裸题,区间连点,点连区间 假如直接连边跑的话一定会T 这时候就需要线段树优化建图了 两个线段树 一个树是区间连点的,叫out 一个树是点连区间的,叫in 但是两个树内部连边的方向不一样 如图 假如相反必然就不对了包含关系错了 剩下的就好 阅读全文
posted @ 2019-10-16 19:45 ChrisKKK 阅读(116) 评论(0) 推荐(0)
摘要:学习笔记 莫队 讲解 "某大佬的博客" 里面讲的很详细 解决问题 主要解决序列上的问题 比如区间的不同元素个数等等乱七八糟的 主要方法 通过离线把区间分块排序来让暴力效率更高 哪怕是待修也可以通过增加一维解决 排序比较函数 一般的: 待修的: 增加了一维 cpp inline bool cmp1(n 阅读全文
posted @ 2019-10-16 15:36 ChrisKKK 阅读(158) 评论(0) 推荐(0)
摘要:Luogu_P3302 [SDOI2013]森林 主席树,启发式合并,lca "luogu题面" 求树上路径的第k大,树之间还有合并。 明显是主席树再加合并。 先说链上第k大,其实就是$Tx+Ty Tlca Tlcafa$ $T$表示权值线段树。 主席树维护的是从根节点到当前节点的前缀和。 ask的 阅读全文
posted @ 2019-09-27 22:03 ChrisKKK 阅读(156) 评论(0) 推荐(0)
摘要:Luogu题目:https://www.luogu.com.cn/problem/CF600E 值域线段树加合并。 基本上就是裸的。 代码如下: 阅读全文
posted @ 2019-09-18 19:25 ChrisKKK 阅读(235) 评论(1) 推荐(0)
摘要:题面:https://www.luogu.org/problem/CF242E 因为XOR的lazy tag不可以叠加。 所以就弄得比较麻烦。 需要把每个数二进制拆分。 也把lazy tag二进制拆分。 0异或一个数还是那个数,1异或一个数就是取反。 所以遇见tag的第i位为1的时候就用总数减去现在 阅读全文
posted @ 2019-09-17 21:55 ChrisKKK 阅读(228) 评论(0) 推荐(0)
摘要:题面:https://www.luogu.org/problem/UVA12983 求数列有多少个长度为m的严格上升子序列。 暴力很好打,牛客网竟然过了。 f[i][j]表示到第j位匹配了长度为i的严格上升子序列。 代码如下: 果然过不了n2m的复杂度很尴尬。 那么尝试用数据结构优化。 发现,其实每 阅读全文
posted @ 2019-09-11 17:14 ChrisKKK 阅读(235) 评论(0) 推荐(0)
摘要:题目链接:https://www.luogu.org/problem/P1502 其实一眼看不出扫描线。 我们可以把每一个点都变成一个长宽为w和h的矩形。 左边的边是+w,右边的边是-w。 线段树维护区间max和lazy tag。 然后扫描线求max。 代码如下: 阅读全文
posted @ 2019-09-09 19:21 ChrisKKK 阅读(174) 评论(0) 推荐(0)
摘要:模板题:https://www.luogu.org/problem/P5490 这个是用于求面积并的扫描线。 显然只有矩形的两边会使答案发生变化。 所以对每一个边做出一个四元组(x,yl,yh,1/-1) x就是x坐标 yl,yh是这条线的纵坐标,1为左端点,-1为右端点。 然后就可以用线段树模拟线 阅读全文
posted @ 2019-09-09 15:22 ChrisKKK 阅读(265) 评论(0) 推荐(0)
摘要:题目链接:https://ac.nowcoder.com/acm/contest/1033/B 再次吐槽CH 区间gcd再加区间修改。 一般求gcd的时候辗转相除法。 gcd(x,y)=gcd(x,y-x) 那么可以把这个公式推到3个项。 gcd(x,y,z)=gcd(x,y-x,z-y) 可以看出 阅读全文
posted @ 2019-09-09 08:57 ChrisKKK 阅读(1169) 评论(1) 推荐(4)
摘要:题目链接:https://ac.nowcoder.com/acm/contest/1032/A (话说CH挂了,可以在牛客上面交) 因为x是按顺序的,那么就是求一个逆序对。 考虑树状数组求逆序对。 两个数组,lt[ ],rt[ ]。 lt[i]表示 a[i] 前面有几个数比它小。 rt[i]表示 a 阅读全文
posted @ 2019-09-07 15:49 ChrisKKK 阅读(156) 评论(0) 推荐(0)
摘要:题面:https://www.luogu.org/problem/P1892 朋友就是普通并查集,普通合并。 敌人的敌人就是朋友怎么实现。 设a和b是敌人 那么将a和b+n合并,a+n和b合并。 这样的话就可以实现敌人的敌人就是朋友了。 设b和c是敌人。 c和b+n合并之后,就相当于和a合并到一个集 阅读全文
posted @ 2019-09-06 17:31 ChrisKKK 阅读(140) 评论(0) 推荐(0)
摘要:例题:https://www.luogu.org/problemnew/show/P3834 主席树用于查询每个历史版本。 这个题代码如下 例题2:https://www.luogu.org/problemnew/show/P3919 主席树裸题,直接就是模板。 代码如下: 阅读全文
posted @ 2019-06-14 20:13 ChrisKKK 阅读(206) 评论(0) 推荐(0)
摘要:背景:今天心血来潮要重新码线段树。 但是。 突然发现真是一条不归路。 这出错那出错。 整了半天,发现两个小错误。 下面说说为什么重码。 之前写的在结构体中存了一个节点的L和R。 就比较费空间。 再加上码风难看和抄的题解,根本不可读。 所以重新写一遍。 代码如下(有lazy标记)。 例题就是线段树1, 阅读全文
posted @ 2019-06-10 22:46 ChrisKKK 阅读(180) 评论(0) 推荐(0)