数据结构
文章平均质量分 79
DS_HY
这个作者很懒,什么都没留下…
展开
-
二叉树的三种先序后序中序遍历的互相推出(例UVA 536 - Tree Recovery)
关于树的先序中序后序遍历由先序中序推后序因为 先序:根 左 右 中序:左 根 右 后序:右 根 左根据他们的对应关系推出树1,先序遍历 中序遍历推后序遍历:#include #include#include#includeusing namespace std;const int maxn=50;void tree(int原创 2017-04-29 21:21:31 · 431 阅读 · 0 评论 -
Gym-101201B(bfs+dp)
;题目网址点击打开链接;;;;;解法一:网上的这个神奇的最短路的想法,其实最短路本来就有dp思想#include #include#include#include#include#includeusing namespace std;const int inf=0x3f3f3f3f;const int maxn=5原创 2017-10-08 16:30:58 · 237 阅读 · 0 评论 -
全排列的实现方法+字典序输出
一:背景全排列在很多笔试都有应用,是一个很常见的算法,关于这类的题目变化很多。这种算法的得到基于以下的分析思路。 给定一个具有n个元素的集合(n>=1),要求输出这个集合中元素的所有可能的排列。例如:给定{1,2,3},全排列为3!个,即:{1,2,3},{1,3,2}{2,1,3},{2,3,1}{3,1,2},{3,2,1}下来分别说下递归法,字典序算转载 2017-10-10 20:37:05 · 22428 阅读 · 5 评论 -
FZU - 2277 Change(线段树)(不明白为什么局部变量是错的)
PS:这个题目改了很久的bug但是就是没有改出来,最后将uvk三个局部变量变成全局变量居然很神奇的过了,表示不明白,如果有大佬知道为什么,欢迎留言。题目链接点击打开链接题意很简单,就是更新一个结点v的值(+x),然后更新其所有子孙vv的值(+x-d*k) d=d[vv]-d[v];首先跑一个dfs,将树转为一维线性的,得到所有点的子孙区间L-R;这个题目的结点存值思路很巧妙,当更新点的时候,更新...原创 2018-04-13 11:33:20 · 231 阅读 · 0 评论 -
AC自动机超级模板题hihoCoder1036
点击打开链接;;;原理题目里直接有解释】;# include<iostream># include<cstdio># include<queue># include<cstring># include<algorithm>using namespace std; const int N=1000000; int cnt;...原创 2018-04-13 20:53:30 · 150 阅读 · 0 评论 -
HDU6162(树链剖分)
难受,翻了各种傻逼错误,导致现在才改完(函数没return,样例忘了换行,多余输出忘了删,估计是太晚了,脑子已经瓦特了),,,,昨天是2018WF 莫斯科拿了一个冠军一个亚军,北大主场拿了季军。这是一个树链剖分裸题,但是以前没看过,还比较简单,来几个博客点击打开链接;点击打开链接;;此题借鉴点击打开链接#include<iostream>#include<cstdio>...原创 2018-04-20 00:59:01 · 412 阅读 · 0 评论 -
HDU - 6031 (lca) (暴力剪枝 或者 二分)
Innumerable Ancestors HDU - 6031 ...原创 2018-05-17 21:18:05 · 256 阅读 · 0 评论 -
The Bakery CodeForces - 833B (dp+线段树)
题目网址https://cn.vjudge.net/problem/CodeForces-833B题意是,将数分为k组,每组数中的数字种类数的和为总价值,求最大总价值。 思路:首先提取每个数字单独出现的区间,用线段树去维护原先的dp最大值,dp【i】【j】表示,将数组分为 在j 的位置 已将数组分为 i 组的最大价值。 代码:#include <iost...原创 2018-07-23 10:05:10 · 216 阅读 · 0 评论 -
HDU - 5792 World is Exploding(数状数组+?)
题意:求一个n个数字的序列A[n] 其中a,b,c,d两两互不相等,1A[d] 其中a,b,c,d的组数思路:先算一个总的数量=逆序对乘顺序对。然后再减去重复,发现只有a=c a=d b=c b=d然后用树状数组维护,首先要离散化。ls[i],lb[i],rs[i],rb[i]分别表示左边比当前位置小的,左边比当前位置大的,右边比当前位置小的,右边比当前位置大的。逆序对数=sig转载 2017-09-04 19:30:58 · 182 阅读 · 0 评论 -
LCA 最近公共祖先问题
一个比较好的博客点击打开链接;;原创 2017-08-22 20:13:14 · 285 阅读 · 0 评论 -
G - Parenthesis (CSU - 1809) 湖南省赛平衡串交换(线段树+RMQ)
找了半天的规律 发现居然是这样。。序列中第i个字符是 ‘(‘, pre[i]=pre[i]+1;序列中第i个字符是 ‘)’, pre[i]=pre[i]−1;这样, 又因为最初的序列是平衡的。当序列不“平衡”当且仅当存在一个数k,使得pre[k]0(1≤k≤N)。只需要用线段树或者RMQ维护区间最小值。 当将第a个字符与第b个字符交换(假定ab),如果第bu原创 2017-04-21 20:42:08 · 430 阅读 · 0 评论 -
UVA__12166 - Equilibrium Mobile(树)
InputOn the rst line one positive number: the number of testcases, at most 100. After that per testcase: • One line with the structure of the mobile, which is a recursively dened expression of the f原创 2017-05-17 17:30:17 · 283 阅读 · 0 评论 -
UVALIVE 3026 Period(kmp)
思路:KMP算法。还记得KMP算法中next数组的含义吗。假设next[i]=x,就表明字符串前i个字符的子串中前x个字符和后x个字符是完全相同的。对于一个周期串来说,假设它的长度是len,最小周期是p,那么它的前len-p个字符和后len-p个字符是完全相同的。那么我们只需要求一次next数组,就可以掌握字符串的所有前缀的周期情况了。这里的next的求法就是最原始的那种,没有优化原创 2017-07-11 00:19:38 · 197 阅读 · 0 评论 -
滑动窗口
(转)题目描述给定一个数组A[],有一个大小为w的滑动窗口,该滑动窗口从最左边滑到最后边。在该窗口中你只能看到w个数字,每次只能移动一个位置。我们的目的是找到每个窗口w个数字中的最大值,并将这些最大值存储在数组B中。例如数组A=[1 3 -1 -3 5 3 6 7], 窗口大小w为3。则窗口滑动过程如下所示:Window position Ma转载 2017-08-08 18:57:23 · 177 阅读 · 0 评论 -
线段树 1(基础 单点更新)
首推一个博客点击打开链接;还有这个点击打开链接;一 概述线段树,类似区间树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(logn)。线段树的每个节点表示一个区间,子节点则分别表示父节点的左右半区间,例如父亲的区间是[a,b],那么(c=(a+b)/2)左儿子的区间是[a,c原创 2017-08-11 16:51:40 · 237 阅读 · 0 评论 -
UVA - 11732 (前缀树)
题目网址点击打开链接;这个题题意是这样的:就是给你字符串进行两两比对,看需要比多少次==,注意相等时==结果ans+=2,如果此位不相等 ans+=1,并且结束比较注意!!!所有的串的比较结束时要么两个不相等,要么至少一个到\0;但是wa点来(wsb)例 wsb wsb比较答案应该是8,而不是6 还需要比较最后一位的\0;竟无语凝噎,因为这,我死磕原创 2017-08-19 09:31:52 · 280 阅读 · 0 评论 -
线段树2(区间更新)
区间更新是指更新某个区间内的叶子节点的值,因为涉及到的叶子节点不止一个,而叶子节点会影响其相应的非叶父节点,那么回溯需要更新的非叶子节点也会有很多,如果一次性更新完,操作的时间复杂度肯定不是O(lgn),例如当我们要更新区间[0,3]内的叶子节点时,需要更新出了叶子节点3,9外的所有其他节点。为此引入了线段树中的延迟标记概念,这也是线段树的精华所在。延迟标记:每个节点新增加一个标记,记录这个节原创 2017-08-12 11:18:28 · 225 阅读 · 0 评论 -
树状数组
结合这两个博客看懂的:点击打开链接点击打开链接‘关于树状数组的实现 数据结构 - 树状数组 ( Binary Indexed Tree,BIT,二分索引树 ),它只有两种基本操作,并且都是操作线性表的数据的: 1、add( i, 1 ) (1 2、sum( i ) (1 试想一下,如果原创 2017-08-13 17:40:04 · 188 阅读 · 0 评论 -
HDU 6194 string string string (后缀数组+线段树)
题目https://cn.vjudge.net/problem/HDU-6194没想到怎么用height数组求个数,看了看题解结合自己写的才明白,妙啊。 我们按照height数组的特点,height【i+1】到height【i+k-1】中的最小值便是在sa【i】 到sa【i+k-1】这k个后缀串中都出现过的子串长度,也就是说这个子串至少出现了k次,但是题目中要求这个子串必须标准...原创 2018-08-30 22:41:58 · 145 阅读 · 0 评论