随笔分类 -  算法竞赛-数据结构

摘要:题意:初始状态的栈内包含一个空集,对栈进行一下操作: PUSH:向栈内压入一个空集 DUP:复制栈顶,并压入栈内 UNION:将栈顶端两个集合出栈,并将两个元素的并集入栈 INTERSECT:将栈顶端两个集合出栈,并将两个元素的交集入栈 ADD:将栈顶端两个集合出栈,将先出栈元素加入后出栈元素的集合 阅读全文
posted @ 2019-04-26 20:40 声声醉如兰 阅读(209) 评论(0) 推荐(0)
摘要:插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序 阅读全文
posted @ 2018-02-27 01:30 声声醉如兰 阅读(386) 评论(0) 推荐(0)
摘要:若一个数在一段区间内作为最大值存在,那么答案应该加上这个数 若一个数在一段区间内作为最小值存在,那么答案应该减去这个数 所以我们利用单调栈,高效求出a[i]在哪个区间内作为最大/最小值存在,从而确定,加/减多少次a[i],最终得到答案 #include<stdio.h> #include<math. 阅读全文
posted @ 2018-01-30 15:07 声声醉如兰 阅读(190) 评论(0) 推荐(0)
摘要:利用单调栈,高效求出每个区间内的最大值和次大值的亦或值。 先正向扫描,利用单调递减栈,若当前栈为空栈,则直接压入栈中,若为非空栈,弹出栈顶元素,每弹出一个元素,则求一次亦或值,保留最大值 接着进行反向扫描,过程与上相似。 #include<stdio.h> #include<math.h> #inc 阅读全文
posted @ 2018-01-30 10:38 声声醉如兰 阅读(132) 评论(0) 推荐(0)
摘要:利用单调栈高效的求出,一个数a[i]在哪个区间内可作为最小值存在。 正向扫描,求出a[i]可做为最小值的区间的左边界 反向扫描,求出a[i]可作为最小值的区间的右边界 r[i] - l[i] +1 就是a[i]可作为最小值的区间的 最大长度 我们知道:长度为len的区间,包含长度为len-1的区间 阅读全文
posted @ 2018-01-30 10:14 声声醉如兰 阅读(190) 评论(0) 推荐(0)
摘要:分治 #include<stdio.h> #include<math.h> #include<cstring> #include<stack> #include<iostream> #include<algorithm> #include<queue> #define MAXSIZE 100005 阅读全文
posted @ 2018-01-30 09:37 声声醉如兰 阅读(199) 评论(0) 推荐(0)
摘要:题意:一辆汽车由起点开往小镇,总路程为L,路上有N个加油站,第i个加油站距离小镇a[i],最多可为提供b[i]的汽油,汽车开始时有P单位汽油,问汽车内否到达小镇,若能到达输出最小的加油次数。 思路:每经过一个加油站i,汽车就获得了一次在任何时候加油b[i]的权利,当汽车不足以到达下一站时,就加入过往 阅读全文
posted @ 2017-07-15 23:00 声声醉如兰 阅读(167) 评论(0) 推荐(0)
摘要:题意:将一块木板切成N块,长度分别为:a1,a2,……an,每次切割木板的开销为当前木板的长度。求出按照要求将木板切割完毕后的最小开销。 思路:比较奇特的贪心 每次切割都会将当前木板一分为二,可以按切割要求画出二叉树。 总开销 = 各叶子节点的值 x 该叶子节点的深度 树的深度一定,为了使总开销尽可 阅读全文
posted @ 2017-07-15 22:51 声声醉如兰 阅读(317) 评论(0) 推荐(0)
摘要:当我们需要高效的完成以下操作时: 1.插入一个元素 2.取得最小(最大)的数值,并且删除 能够完成这种操作的数据结构叫做优先队列 而能够使用二叉树,完成这种操作的数据结构叫做堆(二叉堆) 堆与优先队列的时间复杂度: 若共有n个元素,则可在O(logn)的时间内完成上述两种操作 堆的结构如下图: 堆最 阅读全文
posted @ 2017-07-13 22:24 声声醉如兰 阅读(1265) 评论(0) 推荐(1)
摘要:拓扑排序 阅读全文
posted @ 2017-03-29 15:28 声声醉如兰 阅读(358) 评论(0) 推荐(0)
摘要:优先队列:顾名思义,首先它是一个队列,但是它强调了“优先”二字,所以,已经不能算是一般意义上的队列了,它的“优先”意指取队首元素时,有一定的选择性,即根据元素的属性选择某一项值最优的出队~ 阅读全文
posted @ 2017-03-29 15:01 声声醉如兰 阅读(178) 评论(0) 推荐(0)
摘要:不说废话了,直接上代码 阅读全文
posted @ 2016-11-22 20:34 声声醉如兰 阅读(194) 评论(0) 推荐(0)
摘要:#include<iostream>#include<algorithm>#include<cstring>#include<vector>#include<stdio.h>#include<stdlib.h>#include<queue>#include<math.h>#include<map># 阅读全文
posted @ 2016-10-26 20:24 声声醉如兰 阅读(919) 评论(0) 推荐(0)
摘要:#include<iostream>#include<algorithm>#include<cstring>#include<vector>#include<stdio.h>#include<stdlib.h>#include<queue>#include<math.h>#include<map># 阅读全文
posted @ 2016-10-24 11:25 声声醉如兰 阅读(225) 评论(0) 推荐(0)
摘要:题目大意:托尔有一部手机可执行三种操作 1.x APP产生一个新消息 2.读取x App已产生的所有消息 3.读取前t个产生的消息 问每次操作后未读取的消息的数量 题目思路: 队列模拟,坑点在于竟然卡内存……详细看代码。 #include<iostream> #include<algorithm> 阅读全文
posted @ 2016-10-07 20:59 声声醉如兰 阅读(205) 评论(0) 推荐(0)
摘要:将两个非递减链表,合并为一个非递减链表并返回 阅读全文
posted @ 2016-09-23 13:46 声声醉如兰 阅读(1237) 评论(0) 推荐(0)
摘要:/*以头插法,创建长度为n的单链表,并实现对其的增、删、改、查*/ 阅读全文
posted @ 2016-09-19 22:34 声声醉如兰 阅读(394) 评论(0) 推荐(0)
摘要:根据图解和一组数据简单解释如何在建立正邻接表和逆邻接表 阅读全文
posted @ 2016-07-14 21:29 声声醉如兰 阅读(609) 评论(0) 推荐(0)