自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不忘初心

方得始终

  • 博客(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关注的人

提示
确定要删除当前文章?
取消 删除