/* 返回顶部 */

随笔分类 -  数据结构

摘要:关于线段树的一些算法的模板的汇总。 Luogu P3372 【模板】线段树 1 普通的线段树,区间加法,区间查询。 #include<cstdio> using namespace std; const int maxn = 100005; int n,m,x,y,flag; int l[4*max 阅读全文
posted @ 2019-06-16 11:13 Mogeko 阅读(156) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题可以用分治的方法解决。(lbgxld说是线段树,但是我觉得分治快而且好写...) 暴力枚举是O(n2),想要优化,就不能一对一对枚举,最好能用一只奶牛一次计算一群其他的贡献。 这就需要考虑听力v和坐标大小x的关系,可以把它转化为一个二维偏序问题。 首先把听力v从大到小 阅读全文
posted @ 2019-05-29 14:18 Mogeko 阅读(178) 评论(0) 推荐(0) 编辑
摘要:Luogu P3295 mrclr两周前做的题让蒟蒻的我现在做? 第一眼组合计数,如果把数字相同的数位看作一个整体,除了第一位不能为零,剩下的每一位都有0~9十种。 设不同的位数为x,那么答案即为910x-1 给出两段相同的区间,可以把它们看作单独的一位一位对应,用并查集把它们合并 阅读全文
posted @ 2019-04-12 23:20 Mogeko 阅读(174) 评论(0) 推荐(0) 编辑
摘要:qwq 题目大意:给出一棵树,要求把这棵树分为若干个集合,集合中不能包含祖先-后代关系,使每个集合中的最大值之和最小。 - 25分 subtask里有一种链的情况,且1号不一定是链的一个端点。也就是说,树是一个根节点连着两条链。 假设两条链的点数分别为m,n(m>n)。这种情况里,前n个点可 阅读全文
posted @ 2019-04-11 19:41 Mogeko 阅读(262) 评论(1) 推荐(0) 编辑
摘要:qwq 这题一看就不会,如果不是gg让做我是坚决不会做的 画图模拟,因为一次只能跳过一个棋子,所以对于一种情况只有三种移动方式: 发现,除了跳到边界,当左右到中间的距离相等的时候就不能再向中间跳了, 而任意一种情况只要一直重复方式3就能达到这样的平衡状态,也就是说这个状态可以通过方式1、2的组合达到 阅读全文
posted @ 2019-03-29 19:04 Mogeko 阅读(169) 评论(3) 推荐(0) 编辑
摘要:传送门 二维平面修改+查询,cdq分治可以解决。 求关于某个点曼哈顿距离(x,y坐标)最近的点——dis(A,B) = |Ax-Bx|+|Ay-By| 但是如何去掉绝对值呢? 查看题解发现假设所有的点都在查询点的左下方,dis(A,B) = (Ax-Bx)+(Ay-By) = (Ax+Ay)-(Bx 阅读全文
posted @ 2019-03-09 22:41 Mogeko 阅读(292) 评论(0) 推荐(0) 编辑
摘要:cdq(陈丹琦)分治,是一种类似二分的算法。基本思想同分治: 它可以顶替复杂的高级数据结构,但必须离线操作。 N维偏序,就是求N个关键字下的顺/逆序对。cdq分治是这类题中常用的降维手段。 一维偏序 学习归并排序时,我们了解到它的一个特性就是可以用来求逆序对。 Luogu P1908 逆序对 voi 阅读全文
posted @ 2019-03-01 13:07 Mogeko 阅读(1159) 评论(2) 推荐(0) 编辑
摘要:这个人讲的特别好:「分块」数列分块入门1 – 9 by hzwer 分块是一种暴力数据结构,可以处理区间操作等问题。 分块,就是分很多块来进行处理,这样查询时可以直接调用整块信息+暴力查询左右两端信息,将线性的枚举优化。 要分块,首先要确定块的大小。 一般来说,块的大小都为√n。这样可以保证整个序列 阅读全文
posted @ 2019-02-25 11:00 Mogeko 阅读(544) 评论(1) 推荐(2) 编辑
摘要:qwq 预处理出从x节点向上跳2i个节点的序号p[x][i]及节点深度dpth[x], 寻找lca时,从Max(可能的最大深度)到0枚举i, 首先把较深的一个节点向上跳至深度相同, 然后两个点同步动作,若p[x][i]p[y][i]则跳。 最终返回他们的父亲$p[x][ 阅读全文
posted @ 2019-01-21 23:53 Mogeko 阅读(164) 评论(0) 推荐(0) 编辑
摘要:((^ 0.0 ^) )~ 堆是一个完全二叉树,对于小根堆,所有父节点<=子节点,下标就和线段树是一样的 在STL里就是优先队列 只有堆顶元素可以操作(询问或弹出)。 加入新元素时x,heap[++size] = x,下标t=size; 每次比较它和父节点(t/2)的大小,如果它较小就swap。 删 阅读全文
posted @ 2019-01-21 08:58 Mogeko 阅读(162) 评论(0) 推荐(0) 编辑
摘要:传送门(ST表裸题) ST表是一种很优雅的算法,用于求静态RMQ 数组l[i][j]表示从i开始,长度为2^j的序列中的最大值 注意事项: 1.核心部分: for(int j = 1; (1<<j) <= n; j++) for(int i = 1; i+(1<<j)-1 <= n; i++) { 阅读全文
posted @ 2018-12-04 19:45 Mogeko 阅读(138) 评论(0) 推荐(0) 编辑
摘要:qwq 今天做完并查集突然想起来这道以前做的好(shui)题, 虽然是黄题,但是是并查集一个比较特别的用法 这道题大概可以用求最小环的方式来做,但是从直觉上果然还是并查集w 乍一看只要求出“父→子”即为环,每次getfa时环长度+1,再用min维护环的最小值即可 这时如果用平时的习惯写路径压缩的话, 阅读全文
posted @ 2018-12-02 23:09 Mogeko 阅读(100) 评论(0) 推荐(0) 编辑
摘要:qwq 同关押罪犯 对于这种希望几个对象分开的题目,只要把并查集反过来想就可以了。 既然要求删除的边权最小,那么只要反过来求给定的点不连通时保留的边权最大即为正解。 同样的,首先将边权排序,不会使敌人连通则连接。 注意事项:1.初始化 2.最后的答案要定义为long long bin哥今天讲的: 当 阅读全文
posted @ 2018-12-02 11:39 Mogeko 阅读(153) 评论(1) 推荐(0) 编辑
摘要:传送门 一眼就能看出来是个并查集 但是并不会写... 看了一下题解说是并查集求最小环qwq 所以,每次加入第i个小同学,判断如果他要告诉的小同学k最后会告诉他(也就是转回来了), 就说明出现了一个环,这时更新一下最小环; 否则就记一下他要告诉的小同学fa[x](为下一个环做铺垫) (如果已经找到环就 阅读全文
posted @ 2018-11-15 23:47 Mogeko 阅读(169) 评论(0) 推荐(0) 编辑
摘要:传送门 阅读全文
posted @ 2018-11-03 21:32 Mogeko 阅读(127) 评论(0) 推荐(0) 编辑
摘要:传送门 首先 这是一个并查集= = 这道题其实明白了还挺简单的qwq 思路: 因为只看仇恨值最大的一对儿,所以把他们从大到小排序,越大的就尽量分开,直到不能再分为止qwq q[x]表示x最大的敌人(x对q[x]的仇恨值最大); 如果x已经有了最大的敌人q[x],那么y就该跟q[x]分到一起;否则q[ 阅读全文
posted @ 2018-11-03 20:19 Mogeko 阅读(151) 评论(0) 推荐(0) 编辑

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