- 博客(17)
- 收藏
- 关注
原创 POJ 2528 Mayor's posters(线段树+离散化)
题目链接:点击打开链接 题意:在墙上贴海报,海报可以相互重叠,问最后可以看到几张海报 思路:可以采用线段树,按照贴海报的顺序去更新线段树染色,最后查询整个区间的染色数即为所求;但是数据太大,所以需要离散化。 离散化简单的来说就是只取我们需要的值来用,复杂度就大大的降下来了。离散化要保存所有需要用到的值,排序后,分别映射到1~n,这样复杂度就会小很多很多 而这题的难点在于每个数字其实表示的是
2017-07-31 23:40:13 342
原创 HDU 1394 Minimum Inversion Number(线段树求逆序数)
题目链接:点击打开链接 题意:一个序列,每次第一个数放到最后位置的过程中,最小逆序数为多少; 思路:先算出原始序列的逆序数,再按照放的过程算最小值 // HDU 1394 Minimum Inversion Number.cpp 运行/限制:31ms/1000ms //此题用线段树计算逆序数,此题求的为总逆序数,而不是每个位置的,因此一个线段树即可;求每个位置的,可参考树状数组求逆序数的思路
2017-07-31 18:51:42 320
原创 Splay树(伸展树)
伸展树(Splay Tree),是一种二叉平衡搜索树,时间复杂度均摊为O(logN),即splay树做m次操作的复杂度为O(mlogN)。 在伸展树上的一般操作都基于伸展操作/提根操作: 假设想要对一个二叉搜索树执行一系列的查找操作,为了使整个查找时间更小,被查频率高的那些条目就应当经常处于靠近树根的位置。于是想到设计一个简单方法, 在每次查找之后对树进行重构,把被查找的条目搬移到离树根近
2017-07-23 11:46:40 1093
原创 HDU 1686 Oulipo(KMP)
题目链接:点击打开链接 KMP超级水的模板题...... // HDU 1686 Oulipo.cpp 运行/限制:124ms/1000ms #include #include #include using namespace std; char w[10005], t[1000005]; int Next[10005]; void MP() { int n = strlen(w);
2017-07-22 15:07:15 415
原创 HDU 4585 Shaolin(Treap)
题目链接:点击打开链接 题意: 少林寺的每个和尚均有编号和战斗等级,新来的小和尚均要和老和尚比试,从老和尚中选和自己的战斗等级相差最少的比,如果有两个,选比自己战斗等级小的和尚。每个和尚的编号和战斗等级均唯一。 其实这是个水题,直接用map即可,但为了练习Treap,采用Treap方法。 可以想到采用的数据结构要能动态的维护一个有序序列(战斗等级,由于战斗等级和编号为一对一映射,直接维护战
2017-07-21 11:43:46 416
原创 Treap
二叉平衡搜索树的一种实现形式,在键值满足二叉搜索树的前提下,增加了priority满足堆序的条件,即为了实现二叉搜索树的平衡化,才增加了堆序的性质,可以证明,如果priority是随机的,那么treap的期望深度是O(logN)的,也就是大部分操作可在O(logN)的时间内完成。 背景: 可以证明,如果一个二叉排序树节点插入的顺序是随机的,这样我们得到的二叉排序树大多数情况下是平衡的,即使存在
2017-07-21 01:01:02 688
原创 HDU 1892 See you~(二维树状数组的单点更新,区间求值)
题目链接:点击打开链接 二维树状数组单点更新,区间求值的入门题目: 一维树状数组的思想很容易应用到二维树状数组中,sum[i][j]表示一块矩阵的和,其中i - lowBit(i) 那么求以(x1,y1) (左下角) 和 (x2,y2)(右上角) 为对角线的矩阵的和为getSum(x2,y2) - getSum(x1 - 1,y2) - getSum(x2,y1 - 1) + getSum
2017-07-17 22:52:27 431
原创 HDU 2838 Cow Sorting(树状数组求逆序数)
题目链接:点击打开链接 树状数组求逆序数的一个模板题。 对于给定的序列,变为递增顺序,每个位置的数的交换次数即为该数组成的逆序对的个数,所以此类题转化为求每个位置的逆序对。num数组保存的为原始数据序列,a,b为树状数组,a用于正向遍历num,对于每个num[i],均从num[i]+1更新到n,即getSum(a,num[i])为比num[i]早出现的且小于num[i]的数的个数,即在该数左边
2017-07-17 00:25:58 428
原创 HDU 1512 Monkey King(左偏树)
题目链接:点击打开链接 题意:一群猴子,每个猴子均在唯一的一个组里,可单独成组。当两个猴子要打架时,若在同一组,不可以打架,若不在一组,每个猴子找到本组中最强壮的去迎战,打完架的两个猴子,强壮值减半,而且这两组猴子合并为一组。 由最强壮的猴子迎战,而且要合并组,可以想到左偏树(有合并操作的堆)。不同于简单的左偏树模板的是,由于要尽快的找到某个节点的堆顶,借助于并查集的思路,存每个节点的父亲节点
2017-07-16 14:05:32 439
原创 POJ 2001 Shortest Prefixes(字典树)
题目链接:点击打开链接 题目大意很简单,就是给出一组字符串,给出能唯一确定每个字符串的前缀。首先进行插入操作建树,然后对每个字符串,再去查询,查询的过程中,遇到出现一次的前缀即为所求 // POJ 2001 Shortest Prefixes.cpp #include #include #include #include #include using namespace std; s
2017-07-15 18:07:17 312
原创 POJ 1611 The Suspects(并查集)
题目链接:点击打开链接 简单的并查集,水题 // POJ 1611 The Suspects.cpp #include #include #include #include using namespace std; class DisjointSet { private: int n; vector fa, rank; public: DisjointSet(int n) :n(
2017-07-15 15:45:56 391
原创 HDU 1873 看病排队(优先队列)
此题水题,价值不大。写这个题解,是想回顾一个问题:变量的生命周期问题,C语言基础中的基础...... #include #include #include #include #include #include using namespace std; struct node { int index, prior; node(int a, int b) :index(a), pr
2017-07-15 01:26:46 532
原创 二叉堆
二叉堆是完全二叉树,实现 查询最值,插入元素,删除任意元素(堆顶或其他),修改任意元素值 的功能,复杂度为O(logN) 由于是完全二叉树,所以用数组实现,方便快捷 法一:普通实现 //Binary Heap,the most common implement of Poriority Queen(Heap) //以最小堆为例 #include #include
2017-07-13 20:55:40 556
原创 二叉搜索树
二叉搜索树可进行查询,插入,删除操作,不是平衡树,平均时间复杂度O(logN),还可到达O(N) ACM竞赛也不大常用二叉搜索树,PAT还是常考 实现方法:指针和数组 指针:除了数据结构学习时,竞赛很少用到指针实现 法一:基于C++类封装实现 #include "stdafx.h" #include #include #include #include #include us
2017-07-13 00:37:05 302
原创 二叉树
ACM竞赛不常用,PAT倒是常用到 大体两种实现方式:指针,数组 指针实现,有利于理解数据结构的内在和提高能力,但竞赛实用性差,竞赛常用数组实现 数据结构学习时应该用指针实现,具体应用时用数组较好 指针实现:大概就是先记录数据和左右孩子编号,再去递归建树或者层序建树(层序用队列实现),具体实现略 数组实现: 用三个数组,数组长度为节点最大个数。data[N],left[N],right
2017-07-12 22:23:09 316
原创 左偏树
左偏树(Leftist Tree)是一种可并堆(Mergeable Heap) ,它除了支持优先队列的三个基本操作(插入,删除,取最小节点),还支持一个很特殊的操作——合并操作 左偏树是一棵二叉树,它的节点除了和二叉树的节点一样具有左右子树指针( left, right)外,还有两个属性:键值和距离(dist)。键值是用于比较节点的大小。距离则是如下定义的: 节点i称为外节点(ext
2017-07-12 16:03:21 975
原创 java写的二叉搜索树(生成和前序遍历)
个人打竞赛多用c/c++,之前除了用到大数时,几乎没用java写过算法和数据结构......记得当时刚刚学习java时,看到一段用java写的数据结构的代码,有些懵逼,传参啦,递归啦,和c++均有差异,就没着重去研究。学了近一年OO思想,正好最近也在巩固java,想起此事,顺手用java写个二叉搜索树吧,十分简单,不过只写了点插入和前序遍历,读者莫黑......下个阶段做算法题可以尝试着用java
2017-07-12 00:46:59 683 3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人