自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

那也行啊

Keyboard not found ... press F1 to continue

  • 博客(70)
  • 资源 (1)
  • 收藏
  • 关注

原创 hdu2871 Memory Control 线段树,二分

之前在poj做过hotel题,看到这题时就想到是线段树了。但是这题比hotel多一些操作,这就让我捉急了。这里NEW操作相当于hotel中的入住,Free操作相当于退房,但是又有一点不同,每次给你一个地址,要求知道这个地址是否在使用,在使用的话是被哪个区间使用,在这个操作中借用的别人的想法,利用vector二分查找位置,GET操作由于引用的vector所以操作很简单,在Reset操作时不能重新建树

2013-12-26 17:39:27 491

原创 SBT

SBT(Size Balanced Tree)是陈启峰提出的一种平衡二叉树,下面是他的论文,中文版的论文在这里。SBT树模板const int maxn = 10000000+10;struct SBT { int l, r, key, s; void init(int k) { l = r = 0, s = 1, key = k;

2013-12-22 22:10:19 494

原创 并查集快速查找区间没有被访问的节点

南阳理工http://acm.nyist.net/JudgeOnline/problem.php?pid=856 通过这个题目对并查集又有了一点新的认识,可以通过并查集实现快速查询区间内没有被访问的节点。初始化数组father并指向自己,每次要访问[L, R]区间的时候,father[i]都指向father[R+1],这样每次father[i]就都保存自己以后第一个没有访问的节点。

2013-10-24 20:22:53 550

原创 poj 2104 划分树

看到这题时确实没有想到一个好的方法解题,纠结了很久之后搜了题解,原来解问题固定的算法,划分树。划分树是靠线段树作为辅助工具,原理和快排相似。划分树建树的过程和快速排序很类似,构建起来也比较简单,关键是在查询操作不太好理解。poj 2104 AC代码:#include #include #include using namespace std;const int

2013-10-07 21:24:39 402

转载 最短路径

转载:http://mindlee.net/2011/11/18/shortest-paths-algorithm/假如你有一张地图,地图上给出了每一对相邻城市的距离,从一个地点到另外一个地点,如何找到一条最短的路? 最短路算法要解决的就是这类问题。定义:给定一个有(无)向图,每一条边有一个权值 w,给定一个起始点 S 和终止点 T ,求从 S 出发走到 T 的权值最小路径,即为最短路径。最短

2013-09-28 20:50:48 762

原创 已知中序遍历和后序遍历,求前序遍历

/**已知中序遍历和后序遍历,求前序遍历算法的主要部分是将中序遍历分成左中右三部分将后序遍历分成左右中三部分最后后序建树的时候节点就等于中间的部分左子树由中序遍历的左部分和后序遍历的左部分构建右子树由中序遍历的右部分和后序遍历的右部分构建*/#include #include #include #include using namespace std;struct nod

2013-09-24 21:04:37 1212

原创 hdu 3342 拓扑排序

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3342题意:根据给出的边来判断是不是拓扑序列或者说是否有环出现。#include #include #include #include using namespace std;#define maxn 10005vector g[maxn];int indegree[

2013-09-24 17:00:01 424

原创 hdu1285 拓扑排序

简单的拓扑排序应用采用邻接矩阵:#include #include #include using namespace std;#define maxn 505int map[maxn][maxn];int indegree[maxn], n, m;int main(){ while (cin >> n >> m) { m

2013-09-23 16:14:28 477

原创 拓扑排序 基础

下面文字来自于百度百科:什么是拓扑序列通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。离散数学中关于偏序和全序的定义:若集合X上的关系是R,且R是自反的、反对称的和传递的,则称R是集合X上的偏序关系。设R是集合X上的偏序(Partial Order),如果

2013-09-23 16:09:04 750

原创 hdu 4717 三分

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4717题意:给出N个点,每个点都给出坐标(x,y)还有每个点的移动方向vx和单位时间移动速度vy,求任意时刻任意两点的最大距离的最小距离,以及发生最小距离的时间。方法:先考虑两个点,它们之间的距离要不是先减后增,就是单调递增,这样就可以三分。代码:#include #include

2013-09-20 18:00:57 398

原创 矩阵算法的基本题型

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1575很水的模板题:#include #include #include using namespace std;#define maxn 101#define MOD 9973struct Mat{ int a[maxn][maxn]; Mat(

2013-09-18 22:09:34 474

转载 矩阵乘法算法

转载一些矩阵乘法的基本操作:#include #include #include using namespace std;#define maxn 101#define MOD 1000000007struct Mat{ int a[maxn][maxn]; Mat() {memset(a, 0, sizeof(a));} Mat(int i)

2013-09-18 21:52:59 456

原创 hdu 4419 线段树 离散化 扫描线

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419题目大意:给出红绿蓝三种颜色的矩形,这些颜色的矩形重叠在一起组合成其他的颜色(共7种),求各种颜色的面积。方法:前面处理扫描线的操作都是很基本的操作,关键的操作是在往上更新的时候,首先在红绿蓝用1,2,4表示,然后再通过位运算可以算出组合成的其他颜色,更新关键操作是参考网上的神代码,具体看

2013-09-11 21:20:56 569

原创 hdu 1255 面积交

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255方法:离散化,线段树,扫描线代码:/**以y轴为扫描线然后用x[]记录下所有的x坐标,并对x坐标去重对于每一条扫描线xl, xr都二分找到在数组x[]的下标在用线段树更新的时候每次找到更新可以的区间的时候用pushdown(),更新到底并且用pushup()往上更新*/

2013-09-09 21:37:54 562

原创 poj 1177 / hdu 1828 线段树 离散化 扫描线

题目链接:http://poj.org/problem?id=1177题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1828题目大意:有多个矩形并在一起,求组成的图形的周长。代码:#include #include #include using namespace std;#define maxn 5005struct Li

2013-09-08 17:26:28 396

原创 poj 1151 线段树 离散化 扫描线

题目链接:http://poj.org/problem?id=1151题目大意:在一个平面里有许多矩形,给你每个矩形两对角的坐标,求矩形面积交。参考:http://blog.csdn.net/new_c_yuer/article/details/6013747代码:/**每次得到一个要更新的区间,都单点更新*/#include #include #include #in

2013-09-07 19:54:01 460

原创 poj 2528 线段树 离散化

题目连接:http://poj.org/problem?id=2528题目大意:在一面墙上贴海报,墙很长,后面贴上去的海报要覆盖掉之前贴上去的海报,现在向墙上逐一的贴海报,问到最后墙上可以看见的海报有几种?方法:线段树,离散化代码:#include #include #include #include using namespace std;#define maxn 10

2013-09-05 20:28:22 531

原创 hdu 2191 多重背包

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2191题目大意:现在你一共有资金n元,市场上有m中大米,每种大米都是袋装的,而且价格不等,购买大米时只能整袋购买。现在问在有限的资金下最多能够购买多少公斤的大米。方法:多重背包,对于每种大米的选择,能够用完全背包就用完全背包进行优化,不能够用完全背包优化就进行二进制优化。代码:#incl

2013-09-04 19:54:21 351

原创 hdu 2642 二维树状数组

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2642二维树状数组的模板题,单点更新,区域求和。代码如下:#include #include #include #define maxn 1005#define lowbit(x) (x&-x)using namespace std;int map[maxn][max

2013-09-02 20:56:35 425

原创 并查集(食物链)

参考:http://blog.csdn.net/niushuai666/article/details/6981689#include #include using namespace std;#define maxn 50005struct Node{ int pre, re;}bin[maxn];int find(int x){ if (bin[x]

2013-08-27 17:34:13 415

原创 nylg 600 花儿朵朵 //离散化+树状数组或线段树

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=600树状数组+离散化:#include #include #include #include using namespace std;#define maxn 300005#define lowbit(x) (x&-x)struct node{ int

2013-08-22 13:23:29 536

原创 hdu 3065 AC自动机

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3065题意:求模板串在文本串出现的次数。方法:构造AC自动机求模板的次数,注意文本串中有不是大写字母的时候将指针返回0(也就是根)。#include #include #include #include using namespace std;#define maxn 100000

2013-08-21 11:37:05 324

原创 LA 4670 ac自动机模板

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=36265#include #include #include #include using namespace std;#define maxn 11000#define sigma_size 26char s[151][80], t[100

2013-08-20 20:57:01 404 1

原创 hdu 2222 AC自动机模板题

#include #include #include #include using namespace std;#define maxn 241000#define sigma_size 26char s[60], t[maxn*5];struct ac{ int ch[maxn][sigma_size]; int val[maxn], f[maxn],

2013-08-20 11:46:57 333

原创 KMP模板题 poj 3461 Oulipo

KMP算法理解链接:http://www.cppblog.com/oosky/archive/2006/07/06/9486.htmlpoj 3461 http://poj.org/problem?id=3461#include #include #include using namespace std;#define maxn 1000005char t[maxn],

2013-08-18 15:26:48 392

原创 (trie树)LA 3942

Trie树,又称单词查找树、字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。Trie树也有它的缺点,

2013-08-17 10:25:20 718

转载 树状数组 区间更新

树状数组天生用来动态维护数组前缀和,其特点是每次更新一个元素的值,查询只能查数组的前缀和,但这个题目求的是某一区间的数组和,而且要支持批量更新某一区间内元素的值,怎么办呢?实际上,还是可以把问题转化为求数组的前缀和。     首先,看更新操作update(s, t, d)把区间A[s]...A[t]都增加d,我们引入一个数组delta[i],表示A[i]..

2013-08-16 16:56:58 1507

原创 归并排序求逆序数

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=117在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。逆序数为偶数的排列称为偶排列;逆序数为奇数的排列称为奇排列。如2431中,21,43,41,31是逆序,逆序数是4,为偶排列。逆序数的直

2013-08-16 10:02:04 402

原创 RMQ(Range Minimum Query)

范围最小值(最大值)问题,给出一个n个元素的数组A1,A2,A3,···,An,通过RMQ这个数据结构能够快速的进行查询操作Query(L, R):计算min(AL,AL+1,···,AR)。这类问题通常用ST算法(Sparse Table):来看一下ST算法是怎么实现的(以最大值为例):首先是预处理,用一个DP解决。设a是要求区间最值的数列,f[i,j]表示从第i个数起连

2013-08-15 16:22:26 440

原创 poj 1442 堆操作

题目链接:http://poj.org/problem?id=1442题意:有一系列数字输入,问在输入到第u个数时,排在以访问次数x(x依次增加)为名次的第x小的数。方法:用两个优先队列实现对堆(一个最大顶堆,一个最小顶堆)的操作,当输入到第u个数,第x访问时,最大顶堆存放u个数中前x个比较小数,最小顶堆存放另u-x个数。代码如下:#include #include #incl

2013-08-14 19:11:45 500

原创 Treap

Treap=Tree+HeapTreap是一棵二叉排序树,它的左子树和右子树分别是一个Treap,和一般的二叉排序树不同的是,Treap纪录一个额外的数据,就是优先级。Treap在以关键码构成二叉排序树的同时,还满足堆的性质(在这里我们假设节点的优先级大于该节点的孩子的优先级)。但是这里要注意的是Treap和二叉堆有一点不同,就是二叉堆必须是完全二叉树,而Treap可以并不一定是。

2013-08-14 13:43:01 374

原创 AVL树

在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(logn)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis,他们在1962年的论文《An algorithm for the

2013-08-13 10:59:02 474

原创 二叉排序树

二叉排序树(binary sort tree)又称二叉搜索树(binary search tree),或者是一棵空树,或者是具有下列性质的二叉树:1.若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值。2.若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值。3.它的左子树和右子树也分别为二叉排序树。性能分析:     每个结点的C(i)为该结

2013-08-13 10:17:31 445

原创 并查集基础知识

并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。     主要操作:     初始化:把每个点所在集合初始化为其自身。通常来说,这个步骤在每次使用该数据结构时只需要执行一次,无论何种实现方式,时间复杂度均为O(N)。  查找:查找元素所在的集合,即根节点。  合并:将两个元素所在的集合合并为一个集合。通常来

2013-08-10 15:09:49 370

原创 二叉堆(堆排序)

堆是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全树。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。

2013-08-09 20:19:49 520

原创 next_permutation,memcmp,memcpy

#include #include #include #include using namespace std;int main(){ int ncase, n, m, a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}, buf[10]; cin >> ncase; while (ncase--) {

2013-08-08 17:24:29 307

转载 STL 简介

STL简介 1 概况.......................................................... 21.1 STL是什么............................................... 21.2 为什么我们需要学习STL................................... 2

2013-08-08 11:35:44 532

转载 C++ STL deque双端队列容器

deque双端队列容器(double-ended queue)与vector非常相似,算法的时间复杂度也是常数阶O(1),deque内部的数据机制和执行性能与vector不同,一般说来,当考虑到容器元素的内存分配策略和操作的性能时,deque相对vector较为有优势。deque双端队列采用分块的线性结构来存储数据,具有高效的删除首尾元素的函数,由于deque容器是以deque块为单位进行内存的分

2013-08-07 17:21:08 390

原创 hdu 1242 Rescue 优先队列

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1242方法:采用优先队列对到达监狱的每个位置的时间进行从小到大排序。代码:#include #include #include #include #include using namespace std;struct node{ int x, y, time;//

2013-08-07 16:31:19 451

转载 优先队列使用

这个是转得网上的,由于不经常使用,偶尔用的时候还经常出错,所以记下来了,经常使用的已经用红色颜色标出来了 :在优先队列中,优先级高的元素先出队列。标准库默认使用元素类型的优先队列的第一种用法,也是最常用的用法:priority_queueint> qi;通过故示例1中输出结果为:9 6 5 3 2第二种方法:在示例1中,如果我们要把元

2013-08-07 14:41:33 292

背包问题九讲

acm算法学习资料,对动态规划中的背包问题进行了很详细的讲解,是很不错的学习资料。

2013-09-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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