学习笔记
笑面蘑菇
这个作者很懒,什么都没留下…
展开
-
快速排序---优化
传送门:洛谷 P1177 吐槽 坑爹的数据,目测有一堆重复的元素。 优化 对于枢轴的优化: 三点取中法(l,mid,rl,mid,rl,mid, r取三点中间值) 随机数法(随机数) 对于排序方法优化: 与其他排序方法混用(Eg.Eg.Eg.在范围较小时直接用插入排序) 将相同的元素聚集在一起 栈模拟递归 代码 #include <cstdio>原创 2018-09-17 16:16:34 · 122 阅读 · 0 评论 -
线段树进阶----扫描线求 面积并&周长并
一.扫描线 简而言之,就是将每个矩阵拆成两条平行的线段(以平行于y轴的线段为例,记录它的x轴坐标,以及它在y轴上所代表的区间),按x轴排序后再一路扫过去(线段与线段之间即为若干个可求解的矩形,依次计算即可),同时,再利用线段树维护y轴上的区间(算是优化吧)。 详细的网上都有,故不详讲(其实比较容易理解) 贴个blog吧 二.离散化相关 好吧,这是我认为的应该注意的地方 ...原创 2018-07-25 13:59:47 · 635 阅读 · 0 评论 -
关于优先队列
简介:本质为堆(了解就好,不要管),能返回容器里的最值(比较方法可自己定义) 头文件:#include < queue > 定义: priority_queue< T> Q //默认大根堆 priority_queue< T,vector< T >, less< int > > Q //大根堆 priority...原创 2018-07-19 15:20:20 · 129 阅读 · 0 评论 -
树 -- simpe things
由于老年人记性不好,还是记一下吧 前序遍历、中序遍历、后序遍历:以 根为基准,例如 先序即为根左右 多叉树转二叉树:“左儿子,右兄弟” 即 父亲节点最左边的孩子作为左孩子,右边的作为右孩子依次处理,提供个带图解的blog 未完待续 ...原创 2018-07-19 14:22:42 · 89 阅读 · 0 评论 -
分块小结
简介:优雅的暴力—-通过划分成块,用整体操作来减少时间 基本思想:“大段维护,局部朴素”(完整块通过打标记或预处理来解决,部分块直接暴力) 块的取值:并非一定是n^0.5,具体需要分析时间复杂度,通常来说比n^0.5小一点会快些 优点:可以在线,适用性强,代码长度一般 缺点:效率较低(自带根号) 常用: - lazy-tag思想打标记 - 通过预处理块与块之间的答案来提高询问效率...原创 2018-07-18 15:00:42 · 158 阅读 · 0 评论 -
[笔记]树状数组杂谈
基本操作 lowbit(x):不想解释,找度娘 inline int lowbit(int x) { return x&amp;amp;amp;(-x); } updata(x,y):修改第x个点{注意当x==0时会TLE } inline void updata(int x,int y) { for(;x&amp;amp;lt;=n;x+=lowbit(x)) b[x]+=y; } getsum(x):获取[1原创 2017-09-14 21:26:41 · 213 阅读 · 0 评论 -
最大子矩阵问题----悬线法
【摘要】 本文针对一类近期经常出现的有关最大(或最优)子矩形及相关变形问题,介绍了极大化思想在这类问题中的应用。分析了两个具有一定通用性的算法。并通过一些例题讲述了这些算法选择和使用时的一些技巧。 【关键字】 矩形,障碍点,极大子矩形 【正文】 一、 问题 最大子矩形问题:在一个给定的矩形网...转载 2017-08-11 10:14:01 · 816 阅读 · 1 评论 -
并查集的优化---路径压缩与启发式合并
并查集的优化分为两类:一种是 优化查找的路径压缩,一种是启发式合并(按集合大小合并与按秩(高)合并) 路径压缩 a.描述:如果查找的总路径过长,尤其是一条链的情况下,那么朴素的查找可能会超时。于是,每次在查找完根节点后,可以将查找路径上的节点直接指向根节点。 b.缺点:在一定程度上破坏了树的结构,也不便于记录其他的附加信息,如有特殊要求,请慎用(迫不得已,可进行特殊处理来维护)...原创 2017-08-15 11:15:33 · 1678 阅读 · 0 评论 -
[笔记] 次小生成树
一.定义:将所有生成树按照权值之和从小到大排列,求排在第二位的生成树.(PS:如果最小生成树不唯一,次小生成树的权值和最小生成树相同, 即可判断最小生成树是否为一) 二.生成树相关性质 1.切割性质:(各边边权均不相同)一条边是连接某两个集合的最小边,那么这条边就在最小生成树中 2.回路性质:(各边边权均不相同)图若有回路,那么回路中的最长边一定不在最小生成树中 三.预备...原创 2017-09-17 18:51:35 · 210 阅读 · 0 评论 -
[笔记]K短路
一.定义:从起点S出发到达目标T的第K小的路径 二.朴素算法: 直接BFS(带优先队列),当目标节点T第K次出队列时,即为所求. 解释:BFS第一次搜到T点时,即为最短距离,那么当第二次搜到呢?不用说,是次短路 RT. : 次短路 节点(距离) S:1 T:6 出队列 队列内元素 1(0) 2(7) 3(9) 6(14) 2(7) 3(9) 6(...原创 2017-09-17 19:05:43 · 410 阅读 · 0 评论 -
[笔记]LCA最近公共祖先---倍增在线算法
一.定义:(出自百度百科) 对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。 二.在线算法(同上): 以序列化的方式一个个的处理输入,也就是说在开始时并不需要已经知道所有的输入。 即在可以在原树改动的情况下随时查询 三.基本思路 位运算:1&amp;lt; &amp;lt; x 等价与 1*(2^x)[至于运算范围,忘d...原创 2017-09-18 11:00:54 · 369 阅读 · 0 评论 -
[笔记]区间最值RMQ---ST
一.定义:(出自百度百科) 对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j&lt;=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题。 二.概括 算法实质是DP再加上倍增思想(与LCA的在线算法差不多) 三.基本思路 用d[i][j]表示以i为起点,2^j内的区间[i,i+2^j-1]内数的极值 预处理:(...原创 2017-09-18 20:28:10 · 355 阅读 · 0 评论 -
[笔记]关于tarjan求连通分量 & 缩点
PS:本文图均用链式前向星存储 一.连通分量(模板) 1.有向图 inline void tarjan(int p) { dfn[p]=low[p]=++dfn_t; q.push(p); for(int i=head[p];i;i=edge[i].next) { int y=edge[i].to; if(!dfn[y]...原创 2017-09-25 12:05:20 · 280 阅读 · 0 评论 -
[洛谷 P1168] 中位数 --- 对顶堆
传送门:洛谷 P1168 题目描述 给出一个长度为NNN的非负整数序列AiA_iAi,对于所有1≤k≤(n+1)/21 \leq k \leq (n+1) / 21≤k≤(n+1)/2,输出A1,A3,…,A2k−1A_1, A_3, …, A_{2k - 1}A1,A3,…,A2k−1的中位数。即前1,3,5,…1,3,5,\dots1,3,5,…个数的中位数。 分析 题目简单明了,...原创 2018-09-26 16:58:56 · 390 阅读 · 0 评论