----------数据结构----------
文章平均质量分 77
__AiR_H
智障蒟蒻,蠢哭。。。QwQ
展开
-
树链剖分(Heavy-Light Decomposition)2016.10.12
参考:http://blog.sina.com.cn/s/blog_7a1746820100wp67.htmlhttps://oi.abcdabcd987.com/summary-of-heavy-light-decomposition/http://blog.csdn.net/acdreamers/article/details/10591443一、概述所原创 2016-10-08 15:16:27 · 768 阅读 · 0 评论 -
区间信息的维护与查询_1 2016.4.24
连续和查询问题给定一个n个元素的数组A1,A2,...,An,你的任务是设计一个数据结构,支持一个查询操作Query(L, R):计算AL + AL+1+ ... + AR如何做呢?如果每次用循环来计算,单次查询需要O(n)的时间,效率太低如果借助前缀和思想,可以花O(n)时间事先计算好Si = A1 + A2 + ... + Ai(定义S0 = 0),因为Query(原创 2016-04-24 20:37:48 · 661 阅读 · 1 评论 -
树 2017.2.15
1、UVa 11234 Expressions#include #include #include #include #include #include using namespace std;struct Node { char data; int left; int right;};const int maxn = 10000 + 5;原创 2016-09-03 17:54:08 · 284 阅读 · 0 评论 -
链表
约瑟夫问题据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止然而Josephus 和他的朋友并不想遵从首先从一个人原创 2016-06-20 00:56:50 · 315 阅读 · 0 评论 -
Aho-Corasick 自动机
参考:《算法竞赛入门经典-训练指南》在模式匹配问题中,如果模板有多个,KMP 算法就不太适合了原创 2016-10-31 17:35:18 · 430 阅读 · 0 评论 -
KMP
1、UVALive 3026 Period#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;ty原创 2016-10-30 19:36:11 · 313 阅读 · 0 评论 -
Trie(前缀树)
1、UVALive 3942 Remember the Word参考:《算法竞赛入门经典训练指南》#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace原创 2016-10-29 08:42:34 · 353 阅读 · 0 评论 -
树分治
参考:《分治算法在树的路径问题中的应用》漆子超一、概述树被定义为没有圈的联通图,具有以下几个性质:1、在树中去掉一条边后所得的图是不连通的2、在树中添加一条边后所得的图一定存在圈3、树的每一顶点 u 和 v 之间有且仅有一条路径分治算法在树结构上的运用,称之为树的分治算法二、树的分治算法1、基于点的分治首先选取一个点将无根树转为有根树,再递归处理原创 2016-10-18 18:30:28 · 615 阅读 · 0 评论 -
STL 2016.11.8
1、Codeforces 514B Han Solo and Lazer Gun#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;typ原创 2016-10-27 19:34:20 · 328 阅读 · 0 评论 -
树状数组
1、POJ 3468 A Simple Problem with Integers参考:《挑战程序设计竞赛》P182区间同时加上一个数,区间求和#include #include #include #include #include #include #include #include #include #include #include #include原创 2017-03-06 17:26:47 · 328 阅读 · 0 评论 -
归并树
1、POJ 2104 K-th Number参考:《挑战程序设计竞赛》P188#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace原创 2017-03-10 17:05:53 · 310 阅读 · 0 评论 -
块状链表(分块)2016.10.3
参考:http://dongxicheng.org/structure/blocklink/苏煜《对块状链表的一点研究》一、概述我们常用的两种线性数据结构是数组和链表,它们各有优缺点数组特点是元素在内存中紧挨着存储,因而优点是定位快 O(1),缺点是插入删除慢 O(n)而链表则不同,它通过指针将不同位置的元素链接起来,因而优缺点与数组正好相反:定位慢 O原创 2016-09-21 10:34:16 · 2840 阅读 · 0 评论 -
线段树
1、Codeforces 377D Developing Game解题思路:参考:http://codeforces.com/blog/entry/10157http://www.cnblogs.com/qscqesze/p/5541837.html转化为扫描线问题#include #include #include #include #include #in原创 2017-04-26 15:26:11 · 492 阅读 · 0 评论 -
线段树 2017.4.26
1、BZOJ 4364 [IOI2014]wall砖墙解题思路:维护区间最大值和最小值以及区间是否相同加读入优化和不加读入优化#include #include #include #include #include #include #include #include #include #include #include #include #in原创 2017-04-21 15:16:04 · 436 阅读 · 0 评论 -
优先队列
1、Codeforces 681C Heap Operations#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;原创 2016-10-24 15:18:09 · 309 阅读 · 0 评论 -
队列、栈
1、双向队列描述 新建的 Beijing Institute Group 银行 (BIG-Bank) 在北理工开了一个营业点,他们装备了由 IBM Coral Studio 提供的现代化计算环境,使用现代的信息技术。通常,每个银行客户都有唯一的用来标识身份的正整数 K ,而每当他来到银行寻求服务时,银行都会给他一个正整数 P ,代表他的优先权。银行一个年轻的管理员李凌对软件服务系原创 2016-07-09 13:45:54 · 338 阅读 · 0 评论 -
线段树 2017.4.20
1、Codeforces 272C Dima and Staircase解题思路:区间更新#include #include #include #include #include #include #include #include #include #include #include #include #include #include using原创 2016-10-24 09:02:52 · 503 阅读 · 0 评论 -
分块
1、POJ 2104 K-th Number参考:《挑战程序设计竞赛》P186注意:1、各种边界问题2、块的大小要合适,比如书中的1000,块的大小为sqrt(n)会超时,因为在进行判断的时候复杂度是有差别的,分别为sqrt(n * logn和sqrt(n) * logn#include #include #include #include #include #inc原创 2017-03-10 11:16:17 · 362 阅读 · 0 评论 -
STL set 与 multiset 2016.10.25
参考:《21天学通C++》一、简介容器 set 和 multiset 让程序员能够快速查找键,键是存储在一维容器中的值set 和 multiset 之间的区别在于,后者可存储重复的值,而前者只能存储唯一的值为实现快速搜索,STL set 和 multiset 的内部结构像一棵二叉树,这意味着将元素插入到 set 或 multiset 时将对其进行排序,以提高原创 2016-10-02 15:29:01 · 318 阅读 · 0 评论 -
树
1、Codeforces 501C Misha and Forest参考:http://blog.csdn.net/codebattle/article/details/42652037题意:给出树中每个点的度和与该点相邻的点的异或值,输出图的每条边解题思路:度为 1 的点为叶子节点,叶子节点相邻的点的异或值为它相邻的点#include #include #原创 2016-10-24 17:50:02 · 260 阅读 · 0 评论 -
堆
1、团队程序设计天梯赛-练习集-L2-012 关于堆的判断#include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef un原创 2016-07-06 21:52:54 · 408 阅读 · 0 评论 -
串_1 2016.4.27
一、串及串匹配如何在字符串数据中,监测和提取以字符串形式给出的某一局部特性这类操作都属于串模式匹配(string pattern matching)范畴,简称串匹配一般地,即:对基于同一字符表的任何文本串T(|T| = n)和模式串P(|P| = m):判定T中是否存在某一子串与P相同若存在(匹配),则报告该子串在T中的起始位置串的长度n和m本身原创 2016-04-27 22:02:20 · 3237 阅读 · 0 评论 -
STL string类 2016.7.18
一、为何需要字符串操作类二、使用 STL string 类1 实例化 STL string 及复制2 访问 string 及其内容3 字符串连接4 在 string 中查找字符或子字符串原创 2016-07-09 23:07:06 · 389 阅读 · 0 评论 -
队列、栈 2016.2.23
1、UVa 673 Parentheses Balance(括号平衡) 题意:输入字符串能两两配对或为空则正确解题思路:用C++的stack对字符串中的元素进行判断 (1)、如果为”(”或”[”则进栈 (2)、若为”)”或”]”时 ①栈为空,则标志位置1退出循环 ②栈不为空,该元素如果可以与栈顶元素进行配对则出栈,否则标志位置1退出循环 (3)、判断完成后若栈为空且标志原创 2016-03-11 19:55:03 · 520 阅读 · 0 评论 -
STL 2016.7.13
1、HDU 5688 Problem D解题思路:对字符串按照 ASCII 值排序后 用 map 存#include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef原创 2016-06-17 15:29:48 · 441 阅读 · 0 评论 -
树 2016.7.13
1、团队程序设计天梯赛-练习集-L2-006 树的遍历解题思路:利用后序遍历和中序遍历建树,再 bfs 求层级遍历#include #include #include #include #include #include #include #include #include #include #include using namespace std;ty原创 2016-07-06 13:30:00 · 350 阅读 · 0 评论 -
线段树 2016.4.13
一、定义线段树(Segment Tree )是一种二叉搜索树不是真正的完全二叉树,但十分近似它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点对于线段树中的每一个非叶子节点[a, b],它的左儿子表示的区间为[a, (a+b)/2],右儿子表示的区间为[(a+b)/2+1 ,b] 因此线段树是平衡二叉树由于二叉树结构的特性,它基本能保持每个操作的时间复杂度为O(logN)线段树在原创 2016-04-11 23:06:00 · 415 阅读 · 2 评论 -
线段树 2016.4.15
1、HDU 1166 敌兵布阵单点更新#include #include #include using namespace std;typedef long long LL;struct SegTree { int left, right; LL sum;};const int maxn = 50000 + 5;int num[maxn];SegT原创 2016-04-13 21:43:33 · 345 阅读 · 0 评论 -
RMQ 问题 2016.7.26
UVa 11235 Frequent values#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;type原创 2016-07-25 21:10:53 · 347 阅读 · 0 评论 -
笛卡尔树(Cartersian Tree)2016.9.12
参考:http://blog.csdn.net/zh_qd1014/article/details/6879083(非常值得一看哦一、笛卡尔树是一棵二叉树,树的每个节点有两个值,一个为 key,一个为 val光看 key 的话,笛卡尔树是一棵二叉搜索树,每个节点的左子树的 key 都比它小,右子树都比它大光看 value 的话,笛卡尔树有点类似堆,根节点的 val是最小原创 2016-09-12 08:54:10 · 698 阅读 · 0 评论 -
区间信息维护与查询 2016.10.13
1、团队程序设计天梯赛-练习集-L3-002 堆栈解题思路:维护区间内点的个数#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define DEBUG printf原创 2016-07-14 21:42:11 · 500 阅读 · 0 评论 -
树链剖分
1、HDU 5052 Yaoge’s maximum profit#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace st原创 2016-10-13 11:17:03 · 259 阅读 · 0 评论 -
Splay Tree(伸展树)
参考:《数据结构(C++语言版)》邓俊辉著 (好书一、伸展树(由 D. D. Sleator 和 R. E. Tarjan 于 1985 年发明)也是平衡二叉搜索树的一种形式。相对于 AVL 树,伸展树的实现更为简洁伸展树无需时刻都严格地保持全树的平衡,但却能够在任何足够长的真实操作序列中,保持分摊意义上的高效率伸展树也不需要对基本的二叉树节点结构做任何附加的要求或改动,更原创 2016-09-06 19:23:54 · 2305 阅读 · 0 评论 -
SBT(Size Balanced Tree)2016.9.6
参考:陈启峰《Size Balanced Tree》一、定义节点大小平衡树( Size Balanced Tree,缩写:SBT)是一种自平衡二叉查找树它是由中国广东中山纪念中学的陈启峰发明的陈启峰于 2006 年底完成论文《Size Balanced Tree》,并在 2007 年的全国青少年信息学奥林匹克竞赛冬令营中发表由于 SBT 的拼写很容易找到中文谐音,它常被中国原创 2016-09-06 01:17:33 · 922 阅读 · 0 评论 -
AVL 树 2016.9.3
一、定义平衡二叉树(Balanced Binary Tree)又被称为 AVL 树(有别于 AVL 算法)(由 G. M. Adelson-Velsky 和 E. M. Landis 于1962年发明,并以他们名字的首字母命名)具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过 1,并且左右两个子树都是一棵平衡二叉树我们知道,对于一般的二叉搜索树(Binary原创 2016-08-24 06:26:50 · 580 阅读 · 0 评论 -
LCA(Least Common Ancestors)最近公共祖先问题
一、树的最近公共祖先(Lowest Common Ancestor)问题是树结构上最经典的问题之一给一棵树T,每个询问形如: “点u和点v 的公共祖先是哪个点? ”,此问题的答案被记为 LCA(T, u, v)LCA 问题的算法分为在线和离线两种,前者要求在回答后一个问题之前必须给出前一个问题的输出而离线问题允许在读入所有询问之后一次性给出所有问题的答案原创 2016-09-09 19:37:07 · 577 阅读 · 0 评论 -
树 2016.8.23
1、二叉排序树描述依次给出n(0个整数,请你以这n个数创建一棵二叉排序树,这棵排序树的根节点为第一个数,并输出其中序遍历和后序遍历。输入共两行,第一行为整数n,第二行为n个整数输出共两行,第一行为中序遍历,第二行为后序遍历样例输入823 45 12 6 7 89 13 47样例输出6 7 12 13 23 45 47 89 7 6 13 12 47 89 45 23原创 2016-07-13 11:12:05 · 382 阅读 · 0 评论 -
堆(优先级队列)
一、STL priority_queue (优先级队列)C++ 的 STL 中提供了“优先队列”这一容器,它和普通的 FIFO 队列都定义在 中,有 push() 和 pop() 过程,分别表示“往队列里加入新元素”和“从队列里删除队首元素”唯一的区别是,在优先队列中,元素并不是按照进入队列的先后顺序排列,而是按照优先级的高低顺序排列换句话说,pop() 删除的是优先级最高的元素,而原创 2016-08-08 21:02:11 · 573 阅读 · 0 评论 -
二叉搜索树 2016.4.11
一、定义二叉搜索树(Binary Search Tree)(BST)(又:二叉查找树,二叉排序树)递归的定义:它或者是一棵空树或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值它的左、右子树也分别为二叉排序树例: 二、模版#include <iostream>#include <cstdlib原创 2016-04-11 16:57:21 · 456 阅读 · 0 评论