12 2018 档案
摘要:题目描述 题解: 看到网上几乎全是树套树, 我就写了个整体二分。 其中操作1,2,3一般整体二分都能做到。 对于前驱,我们只需要在线段树中多维护区间最大值即可; 对于后继…… 通通取反后再跑一遍查询前驱即可。 然后迷之卡空间。 最后迷之卡过。 代码:
阅读全文
摘要:题目描述 题解: 修改=删除+插入。 具体实现时保证先删除后插入。 就是对于某一位状态为插入->删除->插入->删除->……->插入。 而不是插入->插入->删除->……->插入->删除。 不然这个无脑错误会让普通线段树挂掉的。 代码:
阅读全文
摘要:题目描述 题解: 看不懂样例的dalao看这里: 每个位置加入一个数c指的是插入,一个位置上可以有很多数。 整体二分。 将修改和询问放在一起,然后二分值域,每次有询问时判断$k$和$sum[l,r]$的大小。 最后保证$[l,l]$时$k$减成$0$即可。 代码:
阅读全文
摘要:题目描述 题解: 考虑到答案具有单调性,我们将其放入二维树状数组/二维线段树即可。 代码:
阅读全文
摘要:题目描述 题解: 第一道整体二分。 如果只有一个询问,我们可以二分答案,然后O(n)验证; 对于多种询问而且不强制在线,我们就可以使用整体二分。 整体二分的精髓是,先想一个二分暴力,然后把所有二分过程放在一起。 还有,整体二分中,分的是值域。 对于本题直接二分值域,然后将前$mid$个操作扔到树状数
阅读全文
摘要:题目描述 题解: 题目都提示了, 很明显要导一波式子: $$dp[i]=max( dp[i-1] , \frac{ dp[j] } { A[j]*R[j]+B[j] } * (A[i]*R[j]+B[i]))$$ 后面那个东西相当与将第j天的R[j]个A和1个B绑在一起。 $dp[i-1]$没什么好
阅读全文
摘要:题目描述 题解: 用cdq分治求一个点左下方最近的点的距离,然后坐标系旋转。 代码:
阅读全文
摘要:题目描述 题解: 好像和皮皮鼠那题一模一样。 代码:
阅读全文
摘要:题目描述 题解: 动态 点分治。 点分治可以帮助我们将树上的点分层,如果我们把这些点按生成顺序建树的话,我们会得到一棵点分树。 点分树有一个特别好的性质,就是不管原来的树长什么样,建出来的点分树的深度都大约是$logn$。 而且若在点分树中a有一个儿子b,那么在原树中a的管辖子树(即找a作重心的子树
阅读全文
摘要:题目描述 题解: 这位仁兄您点进来的题解是cdq+点分+斜率优化的。 吐草:细节是真多…… 先推一波式子: $dp[i]=min(dp[j]+(dis[i]-dis[j])*p[i]+q[i])=dis[i]*p[i]+q[i]+min(dp[j]-dis[j]*p[i])$ $min()$里面那个
阅读全文
摘要:题目描述 题解: 先要建一棵字典序最小的最短路树。 怎么建呢? 想起后缀数组,然后突然意识到可以按字典序依次搜索每一个点。 具体操作就是搜索时将可以转移到的点记录一下,然后按字典序排序,然后一个一个走。 这样最短路径树就建好了。 然后就是点分治+桶。 代码:
阅读全文
摘要:题目描述: 给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N <= 200000, K <= 1000000。 题解: 用桶存一下,然后每次换边的时候更新答案+合并桶。 代码:
阅读全文
摘要:题目描述: 马上就是小苗的生日了,为了给小苗准备礼物,小葱兴冲冲地来到了商店街。商店街有n个商店,并且它们之间的道路构成了一颗树的形状。 第i个商店只卖第i种物品,小苗对于这种物品的喜爱度是wi,物品的价格为ci,物品的库存是di。 但是商店街有一项奇怪的规定:如果在商店 u,v买了东西,并且有一个
阅读全文
摘要:题目描述 题解: 首先我们应该注意,这道题问的是: 对于点对(a,b),存在点c在ab路径上,且a<->c和b<->c都是阴阳平衡的合法点对(a,b)有多少对。 因此这玩意是树链统计。 阴阳平衡就是$1+(-1)=0$; 用点分治搞一搞。 仔细看一看,你很快发现如果a->b和a->b->c相等的话,
阅读全文
摘要:题目描述: 给出一棵树,求距离不超过k的点对对数。 题解: 点分治板子题。 对于一棵树,我们可以$O(n)$时间求出其重心。(重心:切开这个点得到一堆树,所有树的最大大小最小) 如果我们将一棵树不断找重心->分开->找重心……,我们可以将这棵树分成若干部分。 这个东西叫点分治。 因此将一棵树不断分开
阅读全文
摘要:题目描述 题解: 这是一道LCT+期望。 先来看看这道题让求的E是啥。 我们可以发现,将树链压成序列后,第i项对总和产生的贡献为$i*(n-i+1)*ai$。 我们要维护这个东西。 考虑合并两个区间,那么先有$as[x]=as[ls]+as[rs]$; 然后考虑中间那个点,有$as[x]+=a[x]
阅读全文
摘要:题目描述 题解: 这是一道数学题。 看一眼会发现暴力跑链会超时。 所以我们需要一些神奇的东西。 泰勒展开: 最后那个东西可以当作无穷小。 所以我们可以提一下: 所以我们用LCT维护树链的$f(x0)$前k阶导数就好了。 还有,这道题卡精,一定要将单点值放在函数里面。 代码:
阅读全文
摘要:题目描述 题解: 貌似是LCT的套路题? 就是建主席树,然后每次形成环时将环中的第一条边送给新边作标记。 维护这种恶心东西当然用LCT了。 这道题还不同于裸一点的LCT题。本题要对于每条边新建一个节点(类似圆方树),然后将时间信息放到新建节点上。 最后每次查询只需要查标记小于l的边就行了。 因为标记
阅读全文
摘要:题目描述 题解: SDOI SD题。 LCT维护线段树, 线段树维护dfs序。 由于每次修改只是从根到x,我们可以将它理解为LCT的access操作。 然后轻重链信息发生变化时,在线段树上改一下就好了。 LCTaccess板子敲错导致自己做自己爷爷。 代码:
阅读全文
摘要:题目描述: 题解: 一道非常裸的splay。 代码:
阅读全文
摘要:题目描述 题解: splay维护区间最大最小值,以及相邻两项的最小差。 因为向集合中加入元素不能缩小极差。 还有,要换行。 PE2次。 代码:
阅读全文
摘要:题目描述 题解: 首先,任意一个括号序列消去成对括号后一定是‘)))……)(……(((’的形式。 如果我们能求出当前子序列消去后剩下的东西长什么样,我们就能O(1)出解。 比如前面有a个')',后面有b个‘(’。 那么$ans = (a+1)/2 + (b+1)/2$. 建议自己画一画。 现在的问题
阅读全文
摘要:这个是题目描述: 题解: 啊啊啊啊啊…… 垃圾分数规划。 垃圾树链剖分。 垃圾斜率优化。 垃圾darkbzoj。 这里才是题解: 我们设那个分数的值=k,那么有 $(yi-k*xi)+(qj-k*pj)=0$ 我们要做的是让k最大。 那么很明显开两颗线段树,每个节点存一个凸包。 鉴于我们要让b值最大
阅读全文
摘要:题目描述 题解: 其实就是单点修改,树链查max+sum。 没啥好说的,树剖+线段树搞一搞就好了。 代码:
阅读全文
摘要:题目描述 题解: 因为这个东西占的是最短路的最后一条边,我们可以建出最短路树。 一遍dij即可。 如果这个图就是一棵树,那么所有答案全为-1; 所以说非树边更新了答案。 现在让我们开一棵 2,2,4-三甲基-3-乙基戊烷 ,就是#r巨佬的231树。 如果6- - ->7,那3和7的答案都可以由1->
阅读全文
摘要:题目描述 题解: 线段树维护dfs序。 貌似是裸题。 代码:
阅读全文
摘要:题目描述 题解: 和二维的比起来差不多。 但是这是四维偏序。 所以搞一下CDQ套CDQ。 CDQ是维度a已经有序,按维度b排序,然后将维度c存入一维数据结构。 所以我们在第一层CDQ中分治处理,将合法的前一半打标记。 然后进入第二层CDQ,处理打标记的点对没打标记的点的影响。 可以说是将两维压成一维
阅读全文
摘要:题目描述 题解: 容斥,将询问变成4个加权询问。 然后就是cdq了。 代码:
阅读全文
摘要:题目描述 题解: 对于第一问,我们求二维LIS即可; 对于第二问,我们可以记录向前最长长度,向前最长方案数,向后最长长度,向后最长方案数。 其实改改树状数组即可。 还有,方案数一定要开double。 代码:
阅读全文
摘要:题目描述 题解: 将交换看作两个插入+两个删除。 然后CDQ。 代码:
阅读全文
摘要:题目描述 题解: 将前n个数看作插入,后m个数仍看作删除。 然后就是cdq分治。 代码:
阅读全文
摘要:题目描述 题解: 这是cdq分治模板题。 前置:cdq分治。 好像是一位大佬搞出来的神奇分治,可以直接干掉一层树形结构。 其实实现还是比较简单的。 对于区间(l,r),我们先处理(l,mid)和(mid+1,r),然后处理左右区间之间产生的影响。 具体顺序看题目而定。 比如本题,我们可以先令a有序,
阅读全文
摘要:题目描述: 你要用ATGC四个字母用两种操作拼出给定的串: 1.将其中一个字符放在已有串开头或者结尾 2.将已有串复制,然后reverse,再接在已有串的头部或者尾部 一开始已有串为空。求最少操作次数。 len<=100000 题解: PAM+dp。 先建出PAM,然后对于每一个偶树上的串,满足:
阅读全文
摘要:题目描述 题解: 建出PAM之后倍增跳查。 貌似很裸。 代码:
阅读全文
摘要:题目描述 题解: 看起来是个dp。 还需要SAM维护。 还需要单调队列优化。 代码:
阅读全文
摘要:题目描述 题解: 这篇题解是关于manacher+SAM的。 PS.PAM已更新。 因为我还不会回文自动机我会学的 SAM支持给出一个串,求出现次数。 manacher支持找回文串。 然后放在一起,当每个节点回文半径扩展时查询。 这样时间是O(n^2)的。 为了时间,我们可以O(nlogn)预处理每
阅读全文
摘要:题目描述 题解: 最开始我想倒建倒查,结果发现需要另开线段树维护,结果算法退化了…… 说正解。 正建正查。 线段树合并+SAM。 将询问串放在SAM中,判断是否有匹配。 然后设定边界就可以了。 代码:
阅读全文
摘要:题目描述 题接: 没有任何意义的LCT+SAM。 没有题解 代码:
阅读全文
摘要:题目描述 题解: 对于多串的子串,我们可以建出广义后缀自动机。 由于本题询问的是(子串出现次数>=k)×len的总和,就将所有串扔到自动机中,爆跳pre并标记。每个点得到 一个经过次数cnt。 若cnt>=k,说明这个点压缩的所有子串都可以作为答案串。 然后处理出每个点到根的树链上所有点的答案。 代
阅读全文
摘要:题目描述 题解: 好神啊 建出后缀自动机,然后处理每个点parent树子树中endpos的数量,若为1即可成为识别子串。 对于每个点维护原串所在位置以及right的最小值mn。 然后套上线段树维护区间最小值。 基本就这样了。 代码:
阅读全文
摘要:题目描述 题解: 对于所有n串建广义后缀自动机。 (广义后缀自动机唯一区别就是每次将las附成1,并不需要在插入时特判) 建完后再建出parent树,然后用dfs序+树状数组搞区间不同种类。 其实就是HH的项链+广义后缀自动机。很水的。(虽然我调了半个晚上) 代码:
阅读全文
摘要:题目描述 题解: 鉴于子串我们很容易想到后缀自动机。 先建后缀自动机,然后处理单点价值以及对于每个点的总价值。 T=0要求去重,此时单点价值为1; T=0要求不去重,此时单点价值为parent树上endpos的数量。后缀的前缀就是子串。 由于建成的后缀自动机有向无环,我们可以O(n)时间处理每个点的
阅读全文
摘要:bzoj 题解: 后缀数组+RMQ 有一个性质是,若出现ABA形式,且|A|比较大|B|<=m,那么真正的B块端点可以来回滑动。 因此我们可以正反做两遍后缀数组,利用RMQ求出区间最小值即前缀长。 然后先枚举|A|,再枚举左边A的端点,这样ABA位置大体确定。 然后在两个左端点处分别向两端延伸,更新
阅读全文
摘要:题目大意:求 题解:大毒瘤。 先反演: 然后套路处理后面那三坨为fa,fb,fc。 为了速度,我们可以直接枚举lcm,将μi!=0&&μj!=0之间建一条边权为lcm(i,j)的边。 如果(u,v,w)这个三元组合法的话: 三者互不相同。此时应形成一个三元环。 两项相同。此时有一条边即可。 三项相同
阅读全文
摘要:题目描述 题解: (这是模拟退火题解) 我走上模拟退火这条不归路的第一步 讲一下模拟退火: 物理上,温度骤降会导致材质的损坏,但是晶体的逐渐冷却过程趋于稳定。 这就有了模拟退火算法。 模拟退火的意思,就是先确定初始温度和一个降温系数,然后逐渐冷却,得出正确结果。 这里放一张图: 比如O是我们现在的位
阅读全文
摘要:题目描述: f为斐波那契数列。 T组询问,每次给出表格的n、m。表中(i,j)为gcd(i,j),求表中所有数之积mod 1e9+7的值。 T<=1e5,n,m<=1e9 题解: 反演。 代码:
阅读全文
摘要:粘题目描述: 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案。 小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一步研究。 然而他很快发现工作量太大了,于是向你寻求帮助。 你的任务很简单,小z会告诉你一个整数
阅读全文