数据结构
__Lingyue__
微软亚洲研究院 实习生
展开
-
并查集 模板
并查集是高效的查询两个元素是否属于一个集合的方法,为了使用方便把关系并查集和并查集利用面向对象和泛型编程的思想写在了一起。template <typename Type>class DisjointSet { struct node { int parent_; Type relation_; //parent -> this ...原创 2016-10-20 00:09:33 · 356 阅读 · 1 评论 -
codeforces #383 (div2) B
关于异或的用法,和给定和找元素对儿同理。原创 2016-12-07 13:55:54 · 381 阅读 · 0 评论 -
堆 优先队列 堆排序
利用堆手动实现的优先队列和堆排序原创 2016-12-12 22:55:01 · 334 阅读 · 0 评论 -
hdu 1166 敌兵布阵 区间和
Problem: 给n个节点,有很多命令,两种命令,一种是更新节点的值,一种是区间求和:原创 2016-12-13 16:27:55 · 331 阅读 · 0 评论 -
poj 3691 DNA repair AC自动机 dp
AC自动机+DP,比较裸的题。转载 2016-10-19 11:06:45 · 305 阅读 · 0 评论 -
AC自动机 多模式串匹配 模板
AC自动机就是字典树+KMP,解决了一个串在字典树中的匹配问题。原创 2016-10-18 01:51:28 · 443 阅读 · 0 评论 -
Hdu 3068 最长回文
Problem:给定一个字符串,求这个字符串中最长的回文字符串。原创 2016-10-04 13:57:52 · 327 阅读 · 0 评论 -
Manacher 模板 最长回文串
note:1. 通过添加特殊字符同时解决奇数偶数问题。2. 通过已知结果进行优化。原创 2016-10-04 13:55:38 · 336 阅读 · 0 评论 -
Hdu 4333 Revolving Digits 扩展KMP
Problem:给一个大整数,有一个操作可以把最后一个数字移到最前面,问有多少个不同的数大于原来的数,小于原来的数,等于原来的数?原创 2016-10-04 00:55:33 · 406 阅读 · 0 评论 -
poj 3468 区间更新or求和
Problem: 给一个数组,多次更新一段区间的值,或者查询一段区间的和。原创 2016-12-15 13:53:54 · 286 阅读 · 0 评论 -
poj 3253 Huffman树(最优二叉树)
Problem: 有一个足够长的木板,给定n个需求得木块儿,切n-1刀可以切成这n个木块儿,每一刀的代价是当前所切木板的长度,求最小代价。原创 2016-12-22 20:06:37 · 835 阅读 · 0 评论 -
POJ 1182 食物链【关系并查集】
Problem: A吃B,B吃C,C吃A,给了一系列的关系,判断两个东西的关系是否和已给的关系冲突。 Solution: 将关系当做一个权加入并查集当中,相关关系在一个树上。 具体解法这篇链接讲的很清楚,但是它的代码我觉得还有很大的改进空间,比如还可以提炼出举一反三的模板,代码可读性还可以增加,主函数当中的逻辑冗余,所以我在看懂了这篇博客之后自己又进行了修改和总结。 参考链接:http:...原创 2017-11-10 11:14:20 · 470 阅读 · 0 评论 -
POJ 1611 The Suspects 并查集
Problem: 给了一些队伍,求出0号学生所在队伍的人数,每一个学生可以属于多个团队。 Solution: 并查集的模板题,把各个学生merge,然后直接query就可以了。#include<cstdio>#include<iostream>#include<sstream>#include<cstdlib>#include&...原创 2016-10-19 22:01:58 · 298 阅读 · 0 评论 -
hdu1166 敌兵布阵 一维树状数组
Problem: 给了n个数,有三个操作,增加某个值,减少某个值,求某段区间的和。原创 2017-10-18 21:20:02 · 420 阅读 · 0 评论 -
hdu2642 Stars 二维树状数组
Problem: 给了一个矩阵,每次可以更新一个点的值,多次查询一个子矩阵的和。 Solution: 二维树状数组。原创 2017-10-19 12:45:16 · 538 阅读 · 0 评论 -
树状数组 模板
可以快速求区间和等问题,查询更新复杂度都是lgn, 常数比线段树低。原创 2017-10-18 21:16:52 · 447 阅读 · 0 评论 -
矩形覆盖求并 二维离散化 扫描线算法
Problem: 给了n个矩形的左下角坐标和右上角坐标,求这n个矩形的面积和,覆盖部分只计算一次。 2017广西南宁acm区域赛:https://nanti.jisuanke.com/t/17313 Solution: 利用扫描线算法进行离散化,然后再求和。原创 2017-10-08 17:45:40 · 900 阅读 · 0 评论 -
蓝桥杯 小朋友排队 逆序数对
Problem: 有一个包含n个元素的无序数组,我们要把这个数组变成有序的,但是每次只能交换相邻的两个元素,且对于其中的一个元素来说,每当它被交换一次,它的仇恨值就增加,第一次+1,第二次+2,求怎么排序可以使得所有元素的仇恨值之和最小?返回仇恨值的最小值。原创 2017-03-04 19:39:08 · 569 阅读 · 0 评论 -
线段树 模板
线段树的模板原创 2016-12-11 17:24:17 · 468 阅读 · 0 评论 -
KMP 扩展KMP
1. kmp解决了求所有主串的前缀pre[i] (0 <= i < n)的后缀与模式串前缀的最大匹配长度问题2. 拓展kmp解决了所有主串的后缀suf[i]的前缀,与模式串前缀的最大匹配长度问题.3. 当且仅当len%(len-next[len])==0时,str[next[len]~len-1]为最小循环节原创 2016-08-04 21:40:10 · 440 阅读 · 0 评论 -
hdu 1251 统计难题 Trie树
Problem: 给定一个单词表,再每给一个字符串,就输出它作为前缀的最多次数。原创 2016-10-17 00:13:51 · 293 阅读 · 0 评论 -
Trie树 字典树 模板
字典树是保存字典的非常好的手段。原创 2016-10-17 00:11:08 · 448 阅读 · 0 评论 -
归并排序 求逆序数
1. 利用临时数组合并。2. 当只关心一个整体的解时,可以将其内部排序,方便计算。3. 利用归并的思路恰好求出了逆序数。4. 归并思路:从两个部分从小到大的提取数到临时数组中。原创 2016-08-04 22:40:19 · 4333 阅读 · 0 评论 -
百度之星 大搬家 递推
1. 递推。2. 找到和前某项的关系,比如进行某种组合或者配合。原创 2016-08-05 00:08:18 · 6123 阅读 · 0 评论 -
uva12171 sculpture 离散化 3维bfs求面积体积
1. 离散化。2. 状态数组是关键。3. 求面积利用投影和6个方向就可以解决。原创 2016-08-05 00:28:29 · 1579 阅读 · 0 评论 -
中序-先序 中序-后序 构造树
1. 后序中序构造树2. 先序中序构造树3. 字符树使用map做映射原创 2016-08-04 21:42:20 · 421 阅读 · 0 评论 -
uva10570 外星人聚会 环状序列
环状序列通常有两种方法:1. 延长二倍序列,利用线性模拟环。2. 利用取余改变下标。原创 2016-08-05 00:46:27 · 926 阅读 · 0 评论 -
uva10562 Undraw-the-Trees 字符题处理 递归
字符串函数的应用,递归处理复杂的字符题原创 2016-08-05 00:47:51 · 444 阅读 · 0 评论 -
O(n)级排序
1. 计数排序,桶排序,基数排序。2. 没有利用比较排序,利用了映射的思想,达到了线性复杂度。3. 字符串等长度不定的情况应该用比较排序sort(),比较整数时,数据量大时:元素差值小,用计数,差值大分布均匀,用桶排序,通常情况下都可以使用基数排序,速度比桶排序略慢但仍然是常数级别。原创 2016-08-04 22:47:21 · 4604 阅读 · 0 评论 -
哈希处理字符串
1. 常用哈希函数,seed=131,初始化阶数组,方便等阶后比较,初始化字符串,比较时只需要看差值。2. 逆向初始化字符串,使当前元素在差值中。原创 2016-08-04 22:38:40 · 708 阅读 · 0 评论 -
poj2528 贴海报 区间树离散化
1. 利用离散化大大优化速度。2. 离散化:排序,去重,映射。3. 区间树:判断区间,上下更新值。原创 2016-08-06 11:54:04 · 653 阅读 · 0 评论 -
RMQ 区间最值 模板
1. RMQ 的全称为Range Max/Min Query。2. 构造dp数组的时间为O(nlogn), 但是查询时间为O(1),所以当数据量小于logn时,用朴素遍历找最值就好,但是请求次数大于logn时,就要用这个模板。3. 利用动态规划的思想。原创 2016-10-11 12:09:41 · 357 阅读 · 0 评论 -
POJ 2774 Long Long Message LCP后缀数组
Problem: 给定两个字符串,求两个字符串最长公共子串原创 2016-10-10 11:54:33 · 386 阅读 · 0 评论 -
后缀数组 dc3 模板
线性复杂度后缀数组模板原创 2016-10-10 21:09:28 · 969 阅读 · 0 评论 -
分数运算
1. 分数加减乘除。2. 注意精度。3. 注意求最大公约数时的大小关系。原创 2016-08-04 22:41:52 · 372 阅读 · 0 评论 -
hdu4821 string 字符串 哈希处理
1. 常用哈希函数,seed=131,初始化阶数组,方便等阶后比较,初始化字符串,比较时只需要看差值。2. 逆向初始化字符串,使当前元素在差值中。3. 利用集合的大小是否符合要求判断是否有重复。原创 2016-08-07 01:48:13 · 661 阅读 · 0 评论 -
高精度运算
1. 数据读入,加减乘除,阶乘,取余。2. 不支持负数。3. 乘除只支持大整数和小整数的运算。4. 包括了所有已知的算法竞赛当中的大数运算。5. 这应该是迭代比较完美的一代了,终于完成了高精度模板,继续加油!原创 2016-08-04 22:41:10 · 4298 阅读 · 0 评论 -
uva1354 天平难题 位枚举子集
1. &表示交集,^表示差集,|表示并集。2. 利用交集是否为0还可以判断是否存在包含关系。3. 递归枚举原创 2016-08-06 11:56:19 · 1727 阅读 · 0 评论 -
快速排序 求第k大数
1. 快排利用标兵的思想,但每一次都是比较范围大小,没有精确排序。2. 同样适用于快速求解 需要定性的范围问题,例如:第k大(将前后定性大小,但不用排序).3. 求解第k大:通过判断下标,只计算有k的那一半。4. 快排是从广到窄的递归。5. 快排:a.枢轴要回归.b.i总是指向偏大的值.原创 2016-08-04 22:13:36 · 11330 阅读 · 0 评论