随笔分类 -  数据结构

摘要:题意:有n个方块栈,一开始每个栈里只有一个方块,方块编号为栈编号,两种操作,一种是把方块a所在的栈全放在方块b所在的栈上面,另一种要求输出方块a的下面有多少个方块。解法:并查集。用数组size[i]维护以i为根的集合大小,数组ans[i]维护方块i下面有多少方块,那么当两个栈合并时,栈a的底的ans... 阅读全文
posted @ 2015-11-10 20:35 露儿大人 阅读(190) 评论(0) 推荐(0)
摘要:题意:有n台电脑,分布在一个二维坐标系中,两台距离不超过d的电脑可以相互通信,初始所有的电脑都是坏的,给出一组操作,第一种操作是修复某台电脑,只有修好的电脑才可以互相通信,第二种操作是询问两台电脑是否可以直接或间接通信。解法:并查集。将电脑间距离不超过d的两台电脑用无向边连接,当修复一台电脑时就把它... 阅读全文
posted @ 2015-11-05 19:44 露儿大人 阅读(195) 评论(0) 推荐(0)
摘要:题意:给出n个人的信息,包括这个人来的时候站在第几个人的后面和这个人的数值,求所有人都到之后的序列。解法:线段树单点更新。线段树结点表示当前区间里空位个数,倒序遍历,对于每个人来的时候站的位置a就是序列中空位的序号,每次插入的时候看左儿子的空位数,如果比a大说明a在左区间里,如果比a小说明在右区间里... 阅读全文
posted @ 2015-10-12 15:11 露儿大人 阅读(147) 评论(0) 推荐(0)
摘要:题意:求LCA……这棵树是单向边,入度为0的为根,只有一组查询。解法:st求LCA(只会这个)。dp[i][j]表示第i个点的第2j个祖先是谁,转移方程dp[i][j] = dp[dp[i][j - 1]][j - 1]。先dfs一边记录dp[i][0],和点的深度,求LCA的时候先把深度大的点升到... 阅读全文
posted @ 2015-09-21 20:26 露儿大人 阅读(108) 评论(0) 推荐(0)
摘要:题意:给一棵二叉树的中序,前序为升序的1~n,m个查询,求从根走到被查询结点的路径。解法:模拟一下给前序中序的建树,边建边记路径就可以了……就是建树的时候写着的有点恶心……代码:#include#include#include#include#include#include#include#incl... 阅读全文
posted @ 2015-09-15 13:51 露儿大人 阅读(157) 评论(0) 推荐(0)
摘要:题意:给出n个虫子的m种关系,这种关系表示两个虫子性别不同,问有没有产生歧义。解法:并查集+向量偏移。跟POJ1173几乎一样。代码:#include#include#include#include#include#include#include#include#include#include#in... 阅读全文
posted @ 2015-09-14 22:08 露儿大人 阅读(125) 评论(0) 推荐(0)
摘要:题意:有两个帮派,每个人只属于一个帮派,m次操作,一种操作告诉你两个人不是一个帮派的,另一种操作问两个人是不是在一个帮派。解法:并查集+向量偏移。偏移量表示和根节点是不是同一帮派,是为0,不是为1。代码:#include#include#include#include#include#include... 阅读全文
posted @ 2015-09-06 18:46 露儿大人 阅读(280) 评论(0) 推荐(0)
摘要:题意:说有n个学生,m个小组,然后0号童鞋感染了sars,跟感染者一组的也认为是感染者了,问一共多少感染者。解法:并查集……代码:#include#include#include#include#include#include#include#include#include#include#incl... 阅读全文
posted @ 2015-09-01 20:52 露儿大人 阅读(115) 评论(0) 推荐(0)
摘要:题意:求一段长度为n的序列里有多少个子区间内的最大值减最小值小于k。解法:RMQ+尺取法或单调队列。RMQ可以用st或者线段树,尺取法以前貌似YY出来过……只是不知道是这个东西……设两个标记l和r,对于区间[l, r]如果满足题中条件则ans+=(r - l + 1),然后r右移一位,直到不符合条件... 阅读全文
posted @ 2015-07-22 12:23 露儿大人 阅读(129) 评论(0) 推荐(0)
摘要:题意:和贴海报这个题类似……只是多了一个查询l到r区间的操作解法:相对贴海报来说不需要离散化,查询操作需要稍作改动。代码:#include#include#include#include#include#include#include#include#include#include#include#... 阅读全文
posted @ 2015-06-29 13:48 露儿大人 阅读(121) 评论(0) 推荐(0)
摘要:题意:给出一个序列,若干查询,询问区间l到r的第k小值。解法:划分树可以最有效的解决这个问题……但是划分树只能解决这个问题= =主席树的应用范围比较广……所以只学了主席树……嗯……膜拜发明主席树的大神,引用一下他的话..这个东西是当初我弱不会划分树的时候写出来替代的一个玩意..被一小撮别有用心的人取... 阅读全文
posted @ 2015-06-18 21:43 露儿大人 阅读(119) 评论(0) 推荐(0)
摘要:题意:滑窗问题。一个长度为n的序列,分别求前k个数中的最值,第2个到第k + 1个数中的最值,...,直到最后一个元素。解法:单调队列。对于求最小值来说,题中的样例k为3,序列为为 1 3 -1 -3 5 3 6 7每次放入数字前,检查队头的编号,看是否已经超过了滑窗的范围,如果超过了... 阅读全文
posted @ 2015-06-11 12:50 露儿大人 阅读(128) 评论(0) 推荐(0)
摘要:题意:给出一棵树,1为根节点,求一段区间内所有点的最近公共祖先。解法:用一棵线段树维护区间LCA。LCA是dp做法。dp[i][j]表示点i的第2^j个祖先是谁,转移方程为dp[i][j] = dp[dp[i][j - 1]][j - 1],初始的dp[i][0]可以用一次dfs求得,这样可以用lo... 阅读全文
posted @ 2015-06-09 13:28 露儿大人 阅读(183) 评论(0) 推荐(0)
摘要:题意:给出一个字典,每条包含两个字符串a和b,空一行给出若干查询,查询给出b求a。解法:map乱搞……据说是个字典树……并不会字典树……TAT一直在T……看题解改了一些函数……长姿势了……不过应该是数据加强了的样子……关闭了cincout的同步流……快了不少TUT代码:#include#includ... 阅读全文
posted @ 2015-05-26 18:56 露儿大人 阅读(143) 评论(0) 推荐(0)
摘要:题意:就是……食物链嘛orz解法:并查集+向量偏移。一!定!不!要!多!组!输!入!!!偏移量0表示同类,1表示吃,2表示被吃代码:#include#include#include#include#include#include#include#include#include#include#inc... 阅读全文
posted @ 2015-05-14 21:51 露儿大人 阅读(157) 评论(0) 推荐(0)
摘要:题意:有一堆星星,每个星星的级别为坐标不高于它且不在它右边的星星个数,求级别为0~n - 1的星星个数。解法:树状数组。输入的星星坐标已经按y坐标升序排序,y坐标相等的按x升序排序,所以每输入一个数只要看之前输入的星星里有几个x坐标小于等于它的x坐标即为它的等级,等级计数器加一,把这个星星的x坐标加... 阅读全文
posted @ 2015-05-14 19:40 露儿大人 阅读(140) 评论(0) 推荐(0)
摘要:题意:给n张海报,按顺序贴海报,问最后能看到多少张不同的海报。解法:成段更新线段树 + 离散化。这道题因为给出的数字是单位长度,所以普通的离散化是有问题的,借鉴了大神的方法:http://notonlysuccess.me/?p=978一开始我的离散化方法是把单位长度改为数轴坐标……但是2 2 1... 阅读全文
posted @ 2015-05-14 13:10 露儿大人 阅读(137) 评论(0) 推荐(0)
摘要:题意:给一个无向图的邻接矩阵,求最小生成树。解法:Kruskal算法。把边按边权排序,从小到大插入生成树中,如果一个边的两个点都在生成树中则不插入,用并查集维护。代码:#include#include#include#include#include#include#include#include#i... 阅读全文
posted @ 2015-05-06 11:03 露儿大人 阅读(146) 评论(0) 推荐(0)
摘要:题意:问给一堆数排序要交换多少次……这个排序方法读题的时候没看出来是什么……后来百度了一下说是冒泡,也就是说这是一个求逆序数的题。解法:求逆序数有三种方法,线段树,树状数组,归并排序。以上三种方法是按我做的顺序排的,实际最优的是归并和树状数组,线段树有常数。线段树:首先要离散化处理,离散化的方法是给... 阅读全文
posted @ 2015-05-05 17:00 露儿大人 阅读(166) 评论(0) 推荐(0)
摘要:题意:给出n个数,q次询问,每次询问一段区间输出区间内最大值和最小值的差。解法:线段树。拿两个线段树分别维护最大值和最小值。代码:#include#include#include#include#include#include#include#include#include#include#incl... 阅读全文
posted @ 2015-05-04 21:04 露儿大人 阅读(135) 评论(0) 推荐(0)