acm
oshawott_cute
这个作者很懒,什么都没留下…
展开
-
矩阵和线性方程组
矩阵(matrix)是一个由数字排列成的矩形,例如A=[a11,a12,a13] [1 2 3][a21,a22,a23]= [4 5 6]是一个23的矩阵,其中i=1,2,j=1,2,3。第i行第j列的元素用aij表示。一般用大写字母表示矩阵,小写字母表示它的元素。A的转置A^T通过翻转A的行和列得到。例如,对于上面的A,小写字母表示它的元素。A的转置A的t次方通过翻转A的行和列...原创 2019-05-13 00:04:44 · 3088 阅读 · 0 评论 -
后缀数组的应用
1。后缀排序的直接应用Burrows-Wheers变换是一种在数据压缩过程中使用的算法。对于长度为n的字符串T=t0t1t2t3…tn-1,令循环后缀Rotation(i)=titi+1…tn-1t0t1…ti-1,即,如果将T看做一个环状字符串,那么Rotation(i)将是从原第i个字符顺次读得的字符串。现在的问题是,对于集合R={Rotation(i)|i属于[0,n)},将R中的字符串按...原创 2019-05-04 22:11:30 · 386 阅读 · 0 评论 -
后缀树完整优化方案
————《高级数据结构》技巧一:每条边维护对应字串的长度(一下简计为边的长度Length(edge))。回想后缀树的定义(这里是隐式树),“从同一个节点映出的任意两条边上标的字符出纳都不会以相同字符开始”,所以我们只需要知道引出边的第一个字符串都不会以相同字符开始,所以我们只需要把知道引出边的第一个字符就知道往哪里走了。而该边的其他字符我们并不需要一个一个检验,只需要比对对应的子串长度与当前要...原创 2019-04-29 09:38:07 · 252 阅读 · 0 评论 -
LCP的引入笔记
——《高级数据结构》前面介绍了几种算法构造后缀数组,虽然得到的后缀数组已经能处理一些简单的问题,但是为了让其能够具有与后缀树相媲美的字符串处理能力,需要引入辅助工具——LCP(Longest Common Prefix,最长公共前缀)。对于字符串St1和St2,它们的最长公共前缀LCP_Str(St1,St2)定义为最大的整数len,满足St1的len次方=St2的len次方(记号意义同前文中...原创 2019-05-04 18:01:09 · 772 阅读 · 0 评论 -
DC3算法模板学习笔记
今天看了一下洛谷sx视频,后缀数组双关键字排序瞬间秒懂,昨天刚了一下午没有看懂的后缀数组基数排序代码有了一点点突破。 对第二关键字桶排序,保持相对顺序不变,则个位数字有序,对第一关键字桶排序,由于第一关键字相同情况下个位总是递增或持平,所以保持有序。 ——《高级数据结构》#include<cstdio>#include<cstring>us...原创 2019-05-04 17:10:07 · 1100 阅读 · 0 评论 -
后缀树继续
优化:1。后缀链加速。首先我们定义后缀链。我们用ap老表是一个字符串,其中a为单个字符,而p可以是包括空串在内的任意字符串。在隐式树中,如果一个节点v的路径标记对应ap,而节点s(v)对应标记p,那么我们建立从v指向s(v)的指针,称作从v到s(v)的后缀链,特别是如果p为空串,那么有从v到根节点的后缀链,根节点没有后缀链。关于后缀链的维护,将在之后介绍。假定我们在当前树中维护好了后缀树,并...原创 2019-04-28 23:28:22 · 180 阅读 · 0 评论 -
DC3算法初步学习笔记
——《高级数据结构》“linear work suffix array construction”的文章中提出了后缀数组的线性时间构造算法。其中DC3算法的时间复杂度和空间复杂度均为O(n);其中DC3(Difference Covor modulo3)算法的时间复杂度仍为O(n);更是一般化的DC算法具有O(vn)的时间复杂度和O(nv的1/2)的空间复杂度。本节介绍DC3算法并给出实现的代...翻译 2019-05-03 22:53:38 · 1917 阅读 · 0 评论 -
后缀树与后缀数组的简介,定义,构建算法
————《高级数据结构》1。后缀树的简介后缀树在1973年被首次提出,当时叫做position tree,该算法能够在线性时间内构建后缀树.,几年之后,又有了另外一种不同的线性算法,这种新算法更加节省空间,可以说是对原来算法的大幅度优化。1995年,在此基础上提出了第一个能在线构建的后缀树,并且该算法以一种更加容易理解的方式呈现。在此之后对后缀树研究,主要是将其应用到不同场景后的变化,如对字符...原创 2019-04-28 17:09:32 · 407 阅读 · 0 评论 -
后缀数组的定义
——《高级数据结构》1.区间闭区间[i,j]={i,…,j},开区间[i,j)=[i…j-1]2.字符串待构建后缀数组的字符串用T来表示。T的长度为n,下标范围为0到n-1。字符串中第i个字符用ti表示,所以T[0,n)=t0t1…tn-1。在C语言中,字符串数组末尾以特殊字符‘\0’结尾(即T[n]=‘0’),为了方便我们用代表结束符,并且它的字典序最小。我们可以扩展这一点,即对于j&a...原创 2019-05-03 15:52:02 · 227 阅读 · 0 评论 -
splay板子
解锁新技能,伸展树,splay基于平衡二叉树,可以查询前驱和后继,保证差值最小哦以x为主人公右旋无图(自行脑补qaq)y节点为x节点的父节点,z节点为y节点的父节点(前置)1.如果x节点存在右节点,那么就把它作为y节点的左儿子,更新x的右儿子的父亲为y节点。void right_rotate(int x){ int y=fa[x]; int z=fa[y]; fa[rig...原创 2019-04-23 22:36:36 · 146 阅读 · 0 评论 -
后缀数组初步
——《高级数据结构》1991年,首次提出了后缀数组(suffix array)的概念。当时,这篇文章是为了提出一种新的数据结构,从而在处理"在线字符串查询"任务中相比较后缀树而言,能够更节省空间(只需要后缀树的1/5-1/3空间)。可见,后缀数组主要是作为后缀树的一个精简的替代品。在接下来的内容中我们将看到,后缀数组不仅仅具有节省空间的优势,而且比后缀树更容易实现,并且同样在许多字符串处理问题上...翻译 2019-05-02 22:41:38 · 93 阅读 · 0 评论 -
后缀树与后缀数组初步
后缀树的定义假定给定一个长度为m的字符串S(下标从1到m),S的后缀树T为一个有m个叶结点的有根树,其叶节点从1到m编号;除了根节点之外,每个内部结点至少有两个孩子;每条边上都标有S的一个非空子串;从同一个结点引出的任意两条边上标的字符串都不会以相同字符开始·(晚上提早熄灯,待填)...原创 2019-04-27 23:07:11 · 172 阅读 · 0 评论 -
lct-洞穴勘探(bzoj2049)
洞穴勘探2049: [Sdoi2008]Cave 洞穴勘测Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 11718 Solved: 5846[Submit][Status][Discuss]Description辉辉热衷于洞穴勘测。某天,他按照地图来到了一片被标记为JSZX的洞穴群地区。经过初步勘测,辉辉发现这片区域由n个洞穴(分别编...原创 2019-04-27 22:46:37 · 216 阅读 · 0 评论 -
读入之类的优化措施
一:读入优化inline int read(){int f=1,x=0;char ch=getchar();while (ch>‘9’||ch<‘0’) f=-1,ch=getchar();while (ch>=‘0’&&ch<=‘9’) x=x10+ch-‘0’;return fx;}二:字符串操作对比char cmd[10];i...原创 2019-04-27 18:35:15 · 173 阅读 · 0 评论 -
动态树的经典应用
——————摘自《高级数据结构》1。求最近公共祖先基于动态树的基本操作,我们很容易在较短的时间内求得任意两个结点u和结点v(在同一棵树中)的最近公共祖先。首先对u执行access(u)操作,同时记录被访问过的结点(在平衡树上打标机即可);然后执行access(v)操作,当第一次碰到已经访问过的点w时,该w就是u和v的最近公共祖先。时间复杂度是O(nlog2n).2.并查集操作在并查集操作一...原创 2019-04-27 17:36:25 · 263 阅读 · 0 评论 -
后缀树的应用
——————《高级数据结构》 在这一节中,我们将给出几个常见的后缀树的应用,并且你将会看到它与其他处理字符串的算法与数据结构(例如KMP算法,AC自动机等)之间的比较。后缀树是一个非常强大的处理字符串问题的工具,并且企图在这一节短篇幅里面穷尽其应用是不可能的。因此,这里的介绍旨在抛砖引玉,更多的应用可以参考相关的书籍以及该领域的最新研究成果。 字符串的精确匹配情形一:给...原创 2019-05-01 22:06:54 · 475 阅读 · 0 评论 -
后缀树的相关证明
——《高级数据结构》1.后缀树中的节点个数至多为2m-1,其中m为字符串的长度。证明:由后缀树的定义我们知道一共有m个叶节点,并且每个内部节点至少有2个孩子节点。假设总共有n个节点,则内部节点的个数为n-m。于是,我们可以得到如下的不等式:2(n-m)+1<=n;即n<=2m-1。因此,后缀树的压缩存储方式导致其节点个数也是与m呈线性关系。2合理选取边标记的表示方式可以使得至多花...原创 2019-05-01 18:34:04 · 230 阅读 · 0 评论 -
后缀树的实现形式
————《高级数据结构》上述后缀树T是根据字符串S的所有后缀构建的。有时候这个S可以是要给字符串集合,所以后缀树T是根据所欲字符串的后缀构建的。这种后缀树也叫做广义后缀树。一种很自然的构建方式可以给每个字符串加两两不同的结尾符,这些结尾符没有在任何字符串中出现过。然后,我们将这些添加了结尾符的字符串首尾相接作为一个整体来构建其后缀树。由于任何一个后缀都不是其他后缀的前缀,并且任意连个字符串的结...原创 2019-04-29 12:09:47 · 464 阅读 · 0 评论 -
又复习了一遍splay板子
void right_rotate(int x){int y=fa[x];int z=fa[y];fa[rightson[x]]=y;if (rightson[x]) { leftson[y]=rightson[x]; }fa[x]=z;if (z){if (leftson[z]==y) leftson[z]=x;else rightson[z]=x;}rig...原创 2019-04-24 19:01:46 · 134 阅读 · 0 评论 -
线段树学习笔记
线段树的构造void build(Node* cur,int l,int r){cur->Left=l;//区间左端点cur->Right=r;//区间右端点if (l+1<r)//如果不是初等区间,那么继续递归构建{cur->LeftChild=new Node;cur->rightChild=new Node;build(cur->Left...原创 2019-05-12 21:14:43 · 132 阅读 · 0 评论 -
同余
同余设n是给定的正整数,若整数a,b满足n|(a-b),则称a和b模n同余,记作a同余于b(mod n).在模的意义下,加减乘的直接计算都不会影响最终结果取模的答案12-8-11同余于2-3-1同余于-2同余于3(mod 5)12811同余于231同余于6同余于1(mod 5)相信大家都熟练的掌握了这个性质。洛谷p4942 小凯的数字题目大意:把l到r的整数写成一排形成一个新的数字如...原创 2019-05-12 21:14:15 · 340 阅读 · 0 评论 -
筛选
//——整理《洛谷tg》质数与合数质数,也称素数或不可约数即除1和它本身以外没有其它正因数的数 合数,好像没听说过其他名字即除1和质数以外的正整数合数a一定存在一个不超过根号下a的质因子上面这条性质可以帮助我们在O(n)的时间复杂度内检验质数相信大家都听说过O(nlnnlnn)的Eratosthenes筛法反正它似乎跑的不慢,#include<bits/std...原创 2019-05-11 13:49:49 · 149 阅读 · 0 评论 -
3D方块
#include<cstdio>using namespace std;const int MaxN=1002;struct SegmentTree{ struct node{ int l,r,lch,rch; int cover,val; }t[MaxN<<1]; int tot; void create(int L,int R) { i...原创 2019-05-10 19:44:56 · 155 阅读 · 0 评论 -
逃生
#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<vector>#include<cstring>#include<cmath>#include<iostream>using names...原创 2019-05-07 22:22:52 · 118 阅读 · 0 评论 -
自适应simpton积分模板
double f(double x){ return b*sqrt(1-(x*x)/(a*a)); } double simpton(double a,double b){ double c=(a)+(b-a)/2; return (f(a)+4*f(c)+f(b))*(b-a)/6;}double integral(double L,double R,double Eps){...原创 2019-05-09 13:14:05 · 206 阅读 · 0 评论 -
kmp算法模板
假设A=“abababaababacb”B=“ababacb”用i指针表示A串:A[i-j+1…i]表示A串从基本思想:i不断增加,随着i的增加j相应地变化,且j满足以A[i]为结尾地长度为j的字符串正好匹配B串的前j个字符(j当然越大越好)。然后,检验A[i+1]和B[i+1]的关系————当A[i+1]=B[j+1]时,i和j各加一;什么时候j=m了,我们就说B是A的子串(B串已经整完...原创 2019-05-09 13:08:00 · 114 阅读 · 0 评论 -
块状链表与块状树初步
1.块状链表的基本思想常见的线性表结构修改操作有:再某一位置后插入一段数,从某一位置开始删除连续若干个数,我们不妨先来看看数组和链表这两种常用线性结构的实现效果。可见,它们各有各的优势和缺点,且恰巧是优势互补。我们不禁想,如果把两者结合起来,是不是会有更优异的表现?块状链表正好是基于这个思想,将数组和链表结合了起来。块状链表整体上看其结构是一个链表,链表上每个节点存放着一段数组,链表上每个节点...原创 2019-05-01 15:25:29 · 218 阅读 · 0 评论 -
SuffixTree
早上照着书本敲了一个小时崩掉了,先扔这里,以后再调试#include<cstdio>#include<cstring> #include<vector>#include<list>using namespace std;//后缀树节点预备备 struct SfxNode{ char *l,*r;//指向字符数组的指针,表示其父亲边标...原创 2019-05-01 14:45:38 · 176 阅读 · 0 评论 -
整理多校一
------代码摘自于jls hdu多校赛讲解视频A.muximum multiple///找到3个正整数,满足x+y+z=n,x|n,y|n,z|n//最大化xyz/*3|n n/3 n/3 n/3n/2 n/4 n/4n/2 n/3 n/6r=n/x s=n/y t=n/z1/r+1/s+1/t=1r<=s<=tr<=3r=2 1/s+1/t+1/2 ...原创 2019-05-13 21:59:23 · 232 阅读 · 0 评论 -
HDU 4542:小明系列故事——未知剩余系
小明系列故事——未知剩余系Time Limit : 500/200ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 4 Accepted Submission(s) : 2Problem Description“今有物不知其数,三三数之有二,五五数之有三,七七数之有二,问物几何...原创 2019-05-05 23:28:26 · 210 阅读 · 0 评论 -
后缀树链表实现板子
由后缀树构建隐式树,划分i阶段回顾1.ukkonen的算法的伪代码function buildplicitTree(){Build TreeT1;for i<-1 to m-1 do //处理阶段i+1for j<-1 to i+1 do//处理第j次扩展在当前树中找到字符串S[j…i]对应的位置,然后看是否需要添加字符S[i+1]}规则1:串S[j…i]终止于叶...原创 2019-04-29 20:08:16 · 218 阅读 · 0 评论 -
treap增加操作查询操作
//递归到叶子节点,一路维护信息即可//查询排名int query_rank(int k,int x){ if (k==0) return 0; if (tr[k].v==x) return tr[tr[k].l].size+1; else if (x>tr[k].v) return tr[tr[k].l].size+tr[k].w+query_rank(tr[k].r,x...原创 2019-04-25 08:48:43 · 124 阅读 · 0 评论 -
treap初步,建树,更新,旋转,插入,删除操作
//建树 struct data{ int l,r,v,size,rnd,w; }tr[100005]; int n,size,root,ans;void update(int k){ tr[k].size=tr[tr[k].l].size+tr[tr[k].r].size+tr[k].w; } 单旋void rturn(int &k){ int t=tr[k]...原创 2019-04-24 22:51:34 · 542 阅读 · 0 评论 -
HDU 1788 Chinese remainder theorem again
Chinese remainder theorem againTime Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 9 Accepted Submission(s) : 5Problem Description我知道部分同学最近在看中国剩...原创 2019-05-04 22:52:30 · 131 阅读 · 0 评论 -
中国剩余定理初步
求解关于x的方程组x同余于ai(mod mi)(mi两两互质)类似的同余方程组问题出现在孙子算经中,所以也叫“孙子定理”或者Chinese Remainder,也叫做CRT。留坑,待补。...原创 2019-05-04 22:34:37 · 94 阅读 · 0 评论 -
splay添加两个操作
找一个节点的前驱:int findpre(int x){ int left=leftson[x]; while (righton[left]) left=rightson[left]; return left;}找一个节点的后继:int findsuc(int x){ int right=rightson[x]; while (leftson[right]) right=lef...原创 2019-04-24 19:07:39 · 226 阅读 · 0 评论 -
块状链表继续笔记
——《高级数据结构》操作1:合并Merge(curBlock,nextBlock)该操作的目的是将相邻两个块合并。一般当相邻两个块的大小加起来不超过n的1/2的时候需要进行合并操作。这一步将nextBlock合并给curBlock,其伪代码如下:function Merge(curBlock,nextBlock){ memcpy(data[curBlock]+curSize[curB...原创 2019-05-01 18:07:38 · 297 阅读 · 0 评论 -
动态树的具体操作
-------------------(摘自《高级数据结构》)用splay维护实路径,用深度作为关键字给节点排序,那么我们将得到唯一一个有序节点。在实现操作之前,我们还需要维护一些额外信息。为了能够在这些实路径之间建立关系,使得我们能够知道这些路径在树结构中的组织方式,我们要为每一颗splay树额外维护其path-parent,即每颗splay对应的实路径中深度最小的父节点。注意实路径,sp...原创 2019-04-27 00:32:21 · 149 阅读 · 0 评论 -
lcttree-补坑
常用功能1.修改这里的修修改可以针对单个元素的,如修改单个点的点权或者单条边的边权;也可以是针对一个特定范围的,比如从某个点到其根节点的路径上的所有边权,或者某两个点之家你的所有边权等等。2.查询除了经典的查询边权或者点权等类似信息之外,由于动态书维护的是森林信息,所以还可以查询某个节点所在树的根节点信息。例如:根节点信息的维护可以用来判断两个节点是否在同一颗树中。3.翻转翻转是针对某...原创 2019-04-26 09:32:28 · 182 阅读 · 0 评论 -
dijstra一定要加堆优化+邻接表鸭鸭鸭鸭!!
血的教训#include<cstdio>#include<iostream>#include<vector>#include<cstring>#include<queue>const int inf=0x3f3f3f3f;const int MAXN=1000010;using namespace std;struct ...原创 2019-03-30 19:46:42 · 122 阅读 · 0 评论