自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zxyoi_dreamer的博客(不定期诈尸)

退役OIer 现役ACMer 555555我怎么这么菜QAQ

  • 博客(133)
  • 收藏
  • 关注

原创 【校内模拟】子串(SAM)(LCT)(主席树)

题解:最后实现注意一下字符串边界,LCT稍微考虑一下可以不用写cut。代码:#include<bits/stdc++.h>#define ll long long#define re register#define cs constnamespace IO{ cs int Rlen=1<<22|1; char buf[Rlen],*p1,*p2; i...

2019-09-30 21:15:12 288

原创 【SDOI2014】向量集(线段树)(凸壳二分)

传送门题解:其实这个写法二进制分组和ZKW线段树差别已经不大了。。。直接建线段树,暴力insert,当一个区间满了的时候建立凸包即可,分上下两个凸壳来建。询问直接在凸壳上二分即可。代码:#include<bits/stdc++.h>#define ll long long#define re register#define cs constnamespace ...

2019-09-29 21:03:24 163

原创 【UOJ191】【集训队互测2016】Unknown(二进制分组)(凸壳二分)

传送门不想写题解,罗哲正论文里面写得很清楚,感觉我没有什么好写的,也没什么必要再证明一遍复杂度了题目原名是“我们仍未知道那天所看见的数据结构的名字”,但是实际上却是利用分治解决了一个看上去很像数据结构的题。罗哲正在论文里面说考场上AC估计要花2~4小时。我TM,我觉得要是我想到操作树上树分治我估计两个小时都调补粗来罗哲正论文里面说二进制分组空间复杂度O(nlog⁡n)O(n\log n...

2019-09-29 19:32:12 484

原创 【UOJ#284】快乐游戏鸡(长链剖分)(单调栈)

传送门我TM就随手一写。UOJ速度榜rk4的同时,加上读优之后UOJ码长榜第二,把fread优化去掉后就成码长榜第一了???某种意义上从侧面证明了这个做法的优越性题解:考虑什么时候能够从sss走到ttt,当且仅当死亡次数已经达到了路径上的www最大值,这个可以倍增求一下。也就是说在死亡次数达到max⁡w\max wmaxw之前,我们只能一直死,那么显然我们希望能够早死早超生。维护一...

2019-09-29 18:02:44 453

原创 【CodeChef-PUSHFLOW】Push the Flow!(LCT)

传送门调了一上午,突然发现答案上界在2e9。。。拿出第一次提交的代码,把INF设成2e9,然后发现2e9+1e9炸int了,define int long long,就过了。。。所以我一上午调了个屁啊然后改了改,把可能爆long long的地方开了long long,感觉还行。题解:简单LCT练习题首先最大流=最小割,考虑求两点最小割。如果是树上的话,显然就是两点之间边权的最小值...

2019-09-29 14:50:07 249

原创 【ZJOI2016】大森林(LCT)

传送门题解:区间LCT种树离线,考虑这棵树和下一棵树的区别。其实就是需要把某些子树从一个点转移到另一个点。建立虚点,把一段时间内(两次改变生长节点之间)长出来的节点用一个虚点接起来,于是在改变生长节点的时候就可以直接用LCT把子树接过去了。没什么细节,xjb实现就行了。代码:#include<bits/stdc++.h>#define ll long long#...

2019-09-29 11:21:19 145

原创 【SDOI2017】树点涂色(LCT)(线段树)

传送门题解:这个操作非常LCT。。。显然操作111就是access。。。考虑怎么对操作222和操作333进行维护。如果没有操作3那就是LCTxjb维护的SB题注意到Splay维护的链一定是一条连续的祖先后代链。不会产生拐弯的情况。那么可以考虑差分,注意到一个点到根节点的答案就是它到根节点经过的Splay个数,记为dis[u]dis[u]dis[u]。操作222的答案就是dis[u...

2019-09-29 09:58:04 106

原创 【CF1137F】Matches Are Not a Child's Play(LCT)(树状数组)

传送门题解:考虑树上最大值和次大值,显然链接它们的链最后删除,且一定是从次大值向最大值一个一个删除。显然我们可以把树拆成若干条链,每条链上的点的删除顺序从一个端点依次向另一个端点。注意到拆成链之后每条链内部的点是一起删除的,而链与链之间的删除顺序由链上最大值来决定。定最大值所在节点为根,容易发现修改就是make_root,询问的话需要知道最大值小于该链最大值的链的siz总和,以及这条链...

2019-09-29 08:41:54 129

原创 【CF1010F】Tree(链分治)(分治NTT)

传送门时限7s的题的复杂度令人捉摸不透。。。O(nlog⁡3n)O(n\log^3n)O(nlog3n)拿下CFrk1(仗着这道题分治FFT部分常数小),好像std也是O(nlog⁡3n)O(n\log^3 n)O(nlog3n)的。。。问题简述如下:一颗二叉树,根节点为111,允许你砍掉任意子树,保留根节点所在的连通块,然后要求你设置每个点的权值,要求每个点权值不小于它的两个儿子的权值...

2019-09-28 21:02:42 610

原创 【CF1083D】The Fair Nut's getting crazy(线段树)(单调栈)

传送门题解:设pre[i]pre[i]pre[i]表示位置iii出现的数上一次出现的位置+1,nxt[i]nxt[i]nxt[i]表示位置iii出现的数下一次的出现位置-1,那么设a<b<c<da<b<c<da<b<c<d,则一对合法的b,cb,cb,c确定之后aaa的合法取值就是b−max⁡(pre[b:c])b-\max(pre[b:...

2019-09-28 15:05:18 171

原创 【CF1034D】Intervals of Intervals(二分答案)(双指针)

传送门题解:首先二分权值第KKK大的区间的权值,怎么统计有多少个区间权值大于等于midmidmid?暴力枚举右端点,合法的左端点是一个前缀,且最大的合法左端点单调递增,我们考虑删去前缀区间来令当前的区间权值小于midmidmid,我们需要处理在右端点为rrr的时候左端点从lll平移到l+1l+1l+1会减少的贡献,直接用ODT的维护方式预处理一波维护一下线段就行了。现在问题还剩下怎么求前...

2019-09-28 11:13:21 398

原创 【POJ2054】Color a Tree(保序回归问题)(贪心)(证明)

传送门比较难的贪心,目前网上没有任何一篇题解有严格的数学证明,所以我来水一发。这道题本质其实是一个保序回归问题,但是有一个参数要取整数就没办法用一般的保序回归解法了。题解:首先我们随便构造一个合法的操作序列T[1:n]T[1:n]T[1:n],考虑以下的邻项交换策略:对于T[i]T[i]T[i]和T[i+1]T[i+1]T[i+1],如果T[i]T[i]T[i]不是T[i+1]T[i+...

2019-09-28 09:59:25 311

原创 【CF997E】Good Subsegments(线段树)(单调栈)

传送门题解:由于保证给出的是一个排列,我们考虑在这上面做一点文章。显然这种情况下连续段[l,r][l,r][l,r]一定有max[l:r]−min[l:r]=r−lmax[l:r]-min[l:r]=r-lmax[l:r]−min[l:r]=r−l考虑离线,将所有询问按照右端点排序,每一个合法的区间在左端点+1。维护区间max[l:r]−min[l:r]−(r−l)max[l:r]-m...

2019-09-27 20:22:52 432 1

原创 【CF896E】Welcome home, Chtholly(分块)(并查集)

传送门题解:分块。由于值域很小,考虑用并查集维护块内相同的数个数以及当前的值,整块修改的时候只需要看一下当前块的值域RRR是否大于两倍当前的修改参数vvv,如果R≥v∗2R\geq v*2R≥v∗2,则我们将[1,v][1,v][1,v]的并查集向上合并并打标记,否则我们将上面的向下合并,于是我们可以在O(a)O(a)O(a)的时间内将值域大小减少aaa,均摊复杂度是对的。操作常数,整块...

2019-09-27 18:52:31 322

原创 【CF1172F】Nauuo and Bug(线段树)(双指针)

传送门题解:一个初值经过区间[l,r][l,r][l,r]之后的值是一个分段一次函数,所有段斜率为111,且相邻两段截距相差为ppp,至多有r−l+2r-l+2r−l+2段,因为−p-p−p操作最多只会进行r−l+1r-l+1r−l+1次。然后这个玩意有一个非常显然而且非常扯淡的性质:这个分段函数每一段长度至少为ppp,用归纳法可以很简单地证明。由于两段之间的截距差为ppp,所以我们把左...

2019-09-27 16:51:27 217

原创 【CF453E】Little Pony and Lord Tirek(主席树)(暴力)

传送门题解:按照恢复满的时间为线段树下标,原序列标号作为根节点顺序建立主席树,然后set维护一下最后访问时间相同的连续段,对于每个连续段,如果是第一次访问,暴力算,否则它们已经被清空过了,在主席树里面二分找到清空时间算一下贡献即可。复杂度均摊分析可以知道是O(nlog⁡n+qlog⁡n)O(n\log n+q\log n)O(nlogn+qlogn),好像有一种线段树暴力O(nlog⁡n+...

2019-09-27 14:57:39 221

原创 【BZOJ4372】烁烁的游戏(动态点分治)(树状数组)

传送门题解:建立点分树,每个分治中心开一个树状数组,表示它对所有到它距离为ttt的点的贡献每次修改直接暴跳分治树父亲修改,发现父子分治中心会对一些点有重复贡献,每个儿子开一个树状表示它的连通块内距离父亲不超过ttt的点被重复贡献了多少。询问暴跳点分树查每一个分治中心的树状数组即可。代码:#include<bits/stdc++.h>#define ll long lo...

2019-09-27 14:42:22 179

原创 【BZOJ2566】xmastree(点分树)

传送门题解:可能手残到了一定程度才会像我一样在算子树siz的时候将siz[u]+=siz[v]打成siz[v]+=siz[u],然后莫名其妙挂一堆点思路挺简单,码起来没什么细节就是有点长~建立点分树,每个分治中心维护两个东西,各个子树中每种颜色到自己的最小距离的序列,自己掌管的子树中每种颜色的点到分治父亲的距离的序列。显然自己更新答案就是考虑每种颜色将两个来自不同子树的路径拼起来,然后...

2019-09-27 11:15:42 304

原创 【CF643G】 Choosing Ads(线段树)

传送门区间绝对众数的线性做法拓展成区间合并,懒得写题解了。代码:#include<bits/stdc++.h>#define ll long long#define re register#define cs constnamespace IO{ inline char gc(){ static cs int Rlen=1<<22|1; sta...

2019-09-26 20:51:39 387

原创 【CF480E】Parking Lot(DP)(单调性)

传送门题解:为什么我会在某人的数据结构讲义里面看到这道题。。。首先我们可以DP求出最大子正方形,设f[i][j]f[i][j]f[i][j]表示以i,ji,ji,j为右下角的最大正方形边长,则对于合法格子的转移就是f[i][j]=min⁡{f[i][j−1],f[i−1][j],f[i−1][j−1]}+1f[i][j]=\min\{f[i][j-1],f[i-1][j],f[i-1][j...

2019-09-26 20:12:56 193

原创 【NOI2018】你的名字(SAM)(线段树合并)

传送门题解:反正空间有1.22个G,xjb乱开也不会MLE题意简述:给你一个串 SSS,每次询问给出串 TTT 和区间 l,rl,rl,r,请你回答TTT有多少个本质不同的子串没有在 S[l:r]S[l:r]S[l:r] 中出现。我们如果能够求出 TTT 每个前缀在 S[l:r]S[l:r]S[l:r] 中的最长匹配长度问题就解决了。首先考虑 l=1,r=∣S∣l=1,r=|S|l=...

2019-09-26 19:20:24 198

原创 【CF 475F】Meta-universe(启发式分裂)

传送门题解:一个显然的结论是最终分裂出来的状态的分裂的中间操作没有关系。一个朴素的想法是按照两维排序之后扫一遍看是否有缺口。一个简单的优化是,排序用set,分裂从四个方向搞,每次启发式分裂把小的拿出去。十分好写,一发AC。代码:#include<bits/stdc++.h>#define ll long long#define re register#defin...

2019-09-26 15:20:54 873

原创 【校内模拟】【JAG2015春季赛 C:Casino】炮轰社会报复者(概率论)(特征方程)(一大堆特判)

题解:设ppp为一次赌博获胜的概率,qqq为1−p1-p1−p,即输的概率。仔细思考一下发现实际上就是要我们对于i∈[1,m−1]i\in [1,m-1]i∈[1,m−1]求一个决策表kik_iki​,表示当前有iii枚硬币的时候我们会赌kik_iki​枚硬币,显然这是一个马尔科夫过程,当前状态与之前的状态和决策无关。设pip_ipi​表示当前有iii枚硬币,在将硬币输光之前能够赢到mmm枚的...

2019-09-26 11:17:34 182

原创 【CF337D】Developing Game(扫描线)(线段树)

传送门题解:这题做法挺多的,不过感觉扫描线要好写很多。对于一个合法的选取集合SSS,显然有max⁡i∈Sli≤min⁡i∈Svi≤max⁡i∈Svi≤min⁡i∈Sri\max_{i\in S}l_i\leq \min_{i\in S}{v_i}\leq \max_{i\in S}v_i\leq \min_{i\in S}r_imaxi∈S​li​≤mini∈S​vi​≤maxi∈S​vi...

2019-09-24 21:08:02 190

原创 【BZOJ2780】Sevenk Love Oimaster(广义SAM)(set启发式合并)

传送门题解:显然是一个裸的广义SAM。问题在于求right集合的大小。我们知道广义SAM求right集合大小可以在建立完广义SAM后暴跳fail更新,也可以直接用set启发式合并。随便写写就好了,这种东西就是怎么开心怎么玩。代码:#include<bits/stdc++.h>#define ll long long#define re register#defin...

2019-09-24 20:24:45 166

原创 【LOJ6041】「雅礼集训 2017 Day7」事情的相似度(SAM)(LCT)(树状数组)

传送门题面太暴力了题解:两个前缀的LCS就是SAM的fail树上的LCA。将询问按照rrr排序。暴力处理询问的方式就是跳fail树看有没有之前打上的标记。然后求一个后缀最大值。利用LCT的access来进行打标记,在切换儿子的时候将最大值扔到树状数组里面即可。代码:#include<bits/stdc++.h>#define ll long long#define...

2019-09-24 19:39:01 194

原创 【CTSC2012】熟悉的文章(广义SAM)(二分答案)(单调队列优化DP)

传送门题解:这个问题看上去就很二分答案。建立广义SAM,然后把询问串放上去跑,处理出每个点向前最多长度为多少的串能够产生匹配。然后现在二分答案,对于二分的LLL,我们需要处理出最多有多少字符可以在广义SAM里面匹配。考虑dp,设dp[i]dp[i]dp[i]表示以iii结尾的串之前能够有多少字符在广义SAM里面匹配。转移是一个区间最大值,直接上单调队列即可。代码:#includ...

2019-09-24 18:00:49 149

原创 【CF700E】Cool Slogans(SAM)(线段树合并)(DP)

传送门洛谷上面那个翻译简直有毒,不知所云,最好自己去读英文题面。题意简述如下:给你一个字符串SSS,请你构造一个字符串序列s1,s2⋯ ,sks_1,s_2\cdots ,s_ks1​,s2​⋯,sk​,使得∀i,si\forall i,s_i∀i,si​是SSS的子串,且sis_isi​在si−1s_{i-1}si−1​中出现了至少两次,请问你最大化kkk,即序列长度。题解:我们只考...

2019-09-24 16:45:42 149

原创 【BZOJ3413】匹配(SAM)(线段树合并)

传送门这道题的题意没有歧义,但是说得不是很清楚。简要叙述如下:给你一个母串SSS,每次给一个串TTT。现在要寻找TTT在SSS中出现的位置,枚举匹配位置在SSS中的开头1→∣S∣1\rightarrow|S|1→∣S∣,然后从TTT中一位一位进行匹配,如果失配跳到下一个开头继续匹配,如果∣T∣|T|∣T∣完全匹配,则停止,如果所有开头位置都枚举过了,也停止,问进行字符比较的次数。题解:对...

2019-09-24 15:49:08 236

原创 【TJOI2017】DNA(后缀数组)

传送门我去看了一下其他的题解,目前找得到的SAM上dfs和DP的做法全部复杂度都是假的。没什么价值。哈希的做法复杂度带一个log,因为不满,而且出题人没有卡自然溢出,所以常数比后缀数组的做法小,十分优秀。后缀数组的做法:将两个串拼接在一起构造后缀数组,于是我们现在可以支持O(1)O(1)O(1)查询LCP,由于允许失配三次,我们利用LCP直接跳过相同的极长段即可。可能SA-IS的后缀数组...

2019-09-24 12:10:26 178

原创 【BZOJ4310】跳蚤(后缀数组)(二分答案)

传送门题解:二分答案为第KKK小的子串(要求本质不同,这个可以后缀数组预处理后快速查询),转化为要求切割后不能存在字典序大于第KKK小的子串。从后往前贪心切割即可。代码:#include<bits/stdc++.h>#define ll long long#define re register#define cs constusing std::cerr;us...

2019-09-24 11:20:32 203

原创 【HEOI2016】【TJOI2016】字符串(SAM)(线段树合并)(树上倍增)

传送门题解:询问的是[a,b][a,b][a,b]的所有子串和[c,d][c,d][c,d]整个串的LCP。翻转一下变成LCS。由于是对于[c,d]整个串,我们二分答案之后树上倍增找到对应节点,看一下SAM这个点上right集合里面有没有我们要的[a,b-len+1]的串就行了。求right集合需要线段树合并。代码:#include<bits/stdc++.h>#de...

2019-09-24 09:47:18 278

原创 【BZOJ3756】Pty的字符串(广义SAM)

传送门题解:广义SAM水题,不是很清楚那些在线构建的为什么能过,应该是出题人没有卡,卡成O(nn)O(n\sqrt n)O(nn​)还是绰绰有余的,这样DarkBZOJ上的AC代码基本全灭。8e58e58e5你给我说根号能过?还有,字符串大小直接开8e6,题面没有说大小,我就因为这个RE了若干次。代码:#include<bits/stdc++.h>#define ll...

2019-09-23 22:11:23 206

原创 【BZOJ1396/2865】识别子串(SAM)(线段树)

传送门题解:建出SAM,能够用来更新答案的是right集合大小为1的,也就是叶子节点,也就是原串的每个位置的代表节点。考虑节点iii,显然[len[fa[i]]+1,len[i]][len[fa[i]]+1,len[i]][len[fa[i]]+1,len[i]]这段区间可以直接被len[fa[i]]+1len[fa[i]]+1len[fa[i]]+1更新。然后对于[1,len[i]−l...

2019-09-23 20:43:35 147

原创 【BZOJ3881】[Coci2015]Divljak(AC自动机)(树上差分)(树状数组)

传送门题解:对SSS建立AC自动机之后,我们发现一个PPP串扔进来就是把所有自己匹配点的祖先不重复地+1,显然树上差分搞定,用树状数组维护一下标记之和就行了。代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char#define cs constnam...

2019-09-23 19:39:31 194

原创 【HDU5566】Clarke and room(AC自动机)(树链剖分)(线段树)

传送门题解:在线也好离线也好,反正AC自动机只建在有询问的线段树节点上就行了。由于树链剖分形态的特殊性,可能很多线段树节点上都没有询问(是两条链标号的并),建出来就是浪费时间。代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char #define cs...

2019-09-23 18:56:31 186

原创 【HDU6096】String(AC自动机)

传送门题解:对于模式串strstrstr,我们构造串str+∗+strstr+*+strstr+∗+str,对于询问串pre,sufpre,sufpre,suf,我们构造串suf+∗+presuf+*+presuf+∗+pre容易发现,对于所有的询问串建立AC自动机,然后把模式串放上去跑,匹配问题就解决了。至于串长限制,直接暴力跳fail即可。对于离线的,这种做法已经足够了,也是就是我写...

2019-09-23 17:05:11 172

原创 【BZOJ4231】回忆树(AC自动机)(KMP)(DFS序)(树状数组)

传送门题解:一个串在从uuu到vvv的路径上匹配,我们直接分情况搞。首先,匹配没有横跨LCA,那么一定是LCA−>uLCA->uLCA−>u的路径上匹配反串,LCA−>vLCA->vLCA−>v匹配原串,直接用AC的fail树上DFS序离线上树状数组,一波就能搞了。然后是横跨了LCA的,直接把前后提一个∣S∣−1|S|-1∣S∣−1长度的串出来做匹配就...

2019-09-23 15:46:44 197

原创 【JSOI2009】密码(AC自动机)(KMP)(状压DP)(爆搜)

传送门下面的代码用了少量std::string的成员函数来完成部分骚操作,如果看不懂请自行百度。题解:这个数据范围和询问的问题就很状压。直接建立AC自动机之后状压DP就可以算出方案数。然后你发现,这是一个计数类问题,不是最优化,却要求输出方案,也就是说我们不太好记录DP的转移方向。先骂一句MMP但是只会在方案数小于等于424242的时候要求输出。然后你发现直接在AC自动机上爆搜复...

2019-09-23 11:58:13 221

原创 【校内模拟】lcm(DP)

对不起,我以为这是一个数学题题解:考虑到lcmlcmlcm实际上就是各个素数的最大次幂乘起来。200200200以内最大次幂能够超过111的素数只有2,3,5,7,11,132,3,5,7,11,132,3,5,7,11,13六个,总状态数8∗5∗4∗3∗3∗3=43208*5*4*3*3*3=43208∗5∗4∗3∗3∗3=4320对于超过13的质数,显然每个数最多只有一个这样的质数,我...

2019-09-23 10:20:07 186

空空如也

空空如也

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

TA关注的人

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