摘要:
XXIV.CF123D String 没啥好说的,直接建出笛卡尔树出来,然后统计一下和即可。复杂度$O(n)$,假如你用DC3的话。 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N= 阅读全文
posted @ 2021-04-01 11:03
Troverld
阅读(64)
评论(0)
推荐(0)
摘要:
XXIII.[NOI2018]你的名字 题解 阅读全文
posted @ 2021-04-01 11:01
Troverld
阅读(46)
评论(0)
推荐(0)
摘要:
XXII.[湖南集训]图森 题解 阅读全文
posted @ 2021-04-01 10:57
Troverld
阅读(69)
评论(0)
推荐(0)
摘要:
XXI.[NOI2016]优秀的拆分 这后缀数组越来越像一个用来求$\operatorname$的工具人了…… 对于一个$\text\(的拆分,我们可以在中间切一刀,变成\)\text\(与\)\text$两半。这时,我们只需要设$a_i$表示以$i$为结尾的$\text$串数量,$b_i$表示以$ 阅读全文
posted @ 2021-04-01 10:55
Troverld
阅读(96)
评论(0)
推荐(0)
摘要:
XX.【模板】后缀自动机 (SAM) 俗话说的好,模板题怎么能用模板水过去呢 我们考虑用建出$ht$数组,然后用单调栈求出每个$ht$最多能向左向右延伸多远(VI.[AHOI2013]差异),然后直接一边扫过求$\max$即可。 复杂度$O(n)$,假如你用DC3的话。但是用倍增实际跑起来也真的超快 阅读全文
posted @ 2021-04-01 10:53
Troverld
阅读(68)
评论(0)
推荐(0)
摘要:
XIX.工艺 /【模板】最小表示法 没啥好说的,直接倍长数组,然后后缀排序即可,道理都在IX.[JSOI2007]字符加密那儿讲过了。 代码: #include<bits/stdc++.h> using namespace std; const int N=600100; int n,m; int 阅读全文
posted @ 2021-04-01 10:52
Troverld
阅读(50)
评论(0)
推荐(0)
摘要:
XVIII.[HEOI2016/TJOI2016]字符串 作为一个理智正常的OIer,二维数点的题说什么都应该离线线段树通过而不是大力搞主席树呀((( 我们发现这题询问中$s[c,\dots,d]$中这个“\(d\)”是不重要的,只需要把最终结果同$(d-c+1)\(取\)\min$即可,因此忽略不 阅读全文
posted @ 2021-04-01 10:50
Troverld
阅读(89)
评论(0)
推荐(0)
摘要:
XVII.[USACO17DEC]Standing Out from the Herd P 一个naive的思路就是将所有串拼一起然后后缀排序,找出所有连续的来自同一个串的后缀。考虑结合I.不同子串个数思考,则如果该区间是$[l,r]\(的话,它的贡献应该是\)\sum\limits_{l\leq 阅读全文
posted @ 2021-04-01 10:47
Troverld
阅读(60)
评论(0)
推荐(0)
摘要:
XVI.[NOI2015]品酒大会 我居然能自己AC NOI的原题,后缀数组果然简单 首先当然是轻松建出SA。 我们考虑借鉴XII.[TJOI2015]弦论的思想,建出笛卡尔树。则对于当前的$ht$长度,它出现在了$(l,r)\(区间里的每一个后缀里,共计\)\dfrac{(r-l+2)(r-l+1 阅读全文
posted @ 2021-04-01 10:44
Troverld
阅读(68)
评论(0)
推荐(0)
摘要:
XV.Annihilate 我当年为什么会手贱开这卡常大毒瘤题呀 思路1. 用vector存下每个字符串在后缀排序后的下标,然后每次枚举两个串,用一个vector里面的数在另一个里面two-pointers找到它两侧的数,然后用ST表求LCP。 时间复杂度$O\Big(\sum|S|(\log\su 阅读全文
posted @ 2021-04-01 10:42
Troverld
阅读(138)
评论(0)
推荐(0)

浙公网安备 33010602011771号