RoNgDaZhOnG

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2017年3月16日

摘要: 这次的后缀数组写的成熟点,也好看点,以后生成后缀数组的话就用这里的build_sa()函数吧rank[i]表示以i为起点的后缀在sa数组中的位置,height[i]则表示sa[i]和sa[i-1]的最长公共前缀的长度。有一个定理:height[rank[i]]>=height[rank[i-1]-1 阅读全文
posted @ 2017-03-16 22:20 学无止境-1980 阅读(168) 评论(0) 推荐(0) 编辑

摘要: 后缀数组的原理很简单,将一个字符串S的所有后缀组成一个字符串数组,并排序,则以后每次判断某个字符串D是不是S的子串只需要strlen(D)*log(strlen(s))的时间复杂度。Codevs1500这题就是一道裸题,考后缀数组的生成,如果一个一个将S的后缀加入到后缀数组中并快速排序需要的时间复杂 阅读全文
posted @ 2017-03-16 22:19 学无止境-1980 阅读(109) 评论(0) 推荐(0) 编辑

摘要: 题目大意:有一个类似于工业加工生产的机器,起点为1终点为n,中间生产环节有货物加工数量限制,输入u v z c, 当c等于1时表示这个加工的环节必须对纽带上的货物全部加工(即上下界都为z),c等于0表示加工上界限制为z,下界为0,求节点1(起点)最少需要投放多少货物才能传送带正常工作。解题思路: 1 阅读全文
posted @ 2017-03-16 22:16 学无止境-1980 阅读(91) 评论(0) 推荐(0) 编辑

摘要: ZOJ3229题目大意:一个屌丝给m个女神拍照,计划拍照n天,每一天屌丝可以和C个女神拍照,每天拍照数不能超过D张,而且给每个女神i拍照有数量限制[Li,Ri],对于每个女神n天的拍照总和不能少于Gi,如果有解求屌丝最多能拍多少张照,并求每天给对应女神拍多少张照;否则输出-1。 解题思路: 1.增设 阅读全文
posted @ 2017-03-16 22:15 学无止境-1980 阅读(87) 评论(0) 推荐(0) 编辑

摘要: 今天开始啃网络流了。对于求解无源汇带上下界的网络流,我们可以这样建图:建图模型: 以前写的最大流默认的下界为0,而这里的下界却不为0,所以我们要进行再构造让每条边的下界为0,这样做是为了方便处理。对于每根管子有一个上界容量up和一个下界容量low,我们让这根管子的容量下界变为0,上界为up-low。 阅读全文
posted @ 2017-03-16 22:14 学无止境-1980 阅读(101) 评论(0) 推荐(0) 编辑

摘要: Splay树可以利用 我Treap树的程序中的rotate函数实现 Splay(x,S)功能,将节点x伸展的节点S处。Splay(x,S)时有三种情况:1、zig情况。 X是查找路径上我们需要旋转的一个非根节点。 如果X的父节点是根,那么我们用下图所示的方法旋转X到根: 图2 这和一个普通的单旋转相 阅读全文
posted @ 2017-03-16 22:11 学无止境-1980 阅读(72) 评论(0) 推荐(0) 编辑

2017年3月12日

摘要: 第一次写传说中的数据结构套数据结构,果然坑了一晚上,不过回头想想也没什么难的。二维线段树是一颗基于X轴的线段树,每颗该线段树的节点又是一颗基于Y轴的线段树。X轴线段树的某个节点所表示的Y轴线段树 维护的是该X轴线段树的两个儿子所表示的Y轴线段树维护的数据之和,如果X轴线段树的这个节点没有儿子,则其表 阅读全文
posted @ 2017-03-12 09:34 学无止境-1980 阅读(172) 评论(0) 推荐(0) 编辑

摘要: Codevs1732,这道题要求求fibonacci数列的第N项,1 <= n <= 100000000000000,非常大,普通的O(N)的求法肯定会TLE,所以我们需要用的快速幂矩阵乘法,在O(logN)的时间内即可求出。矩阵的乘法是这样的:我们定义X(i,j)表示矩阵第i行第j列的元素。我们定 阅读全文
posted @ 2017-03-12 09:33 学无止境-1980 阅读(111) 评论(0) 推荐(0) 编辑

摘要: 半平面交第一次真的好难写啊。。前后加起来起码弄了7小时。半平面交的算法思想并不复杂: 1、将所有向量按极角大小从小到大排序,向量(x,y)的极角=atan2(y,x),当两个向量的极角相等时选择性的保留在较左边的那个 2、运用一种数据结构:双端队列,用phead表示双端队列的头位置,pend表示双端 阅读全文
posted @ 2017-03-12 09:32 学无止境-1980 阅读(156) 评论(0) 推荐(0) 编辑

摘要: 定义一个multiset集合S:multiset <int> S;如果有重复元素一定要记得使用multiset,stl set默认从小到大排序,upper_bound(x)返回集合中第一个大于x的元素地址,lower_bound(x)返回集合中第一个大于等于x的元素地址。我们可以这样定义一个迭代器: 阅读全文
posted @ 2017-03-12 09:31 学无止境-1980 阅读(171) 评论(0) 推荐(0) 编辑