Description: 1<=n<=5e4 题解: 考虑\(f\)这个东西应该是怎样算的? 不妨建出SA,然后按height从大到小启发式合并,显然只有相邻的才可能成为最优答案.这样的只有\(O(n log n)\)个有用的串. 建SAM在fail树上启发式合并是一样的. 然后用个主席树就可以快速查询答案. 现在思考查询一个[x,y],要求f>=z怎么办? 考虑一个区间[l,r],如果a[l-1]<=max[a[l..r]]或a[r+1]<=max[a[l..r]]显然延伸…
Description 给出一个长为n的字符串\(S\)和一个长为n的序列\(a\) 定义一个函数\(f(l,r)\)表示子串\(S[l..r]\)的任意两个后缀的最长公共前缀的最大值. 现在有q组询问,每组询问给出\(L,R,x\) 你需要找到一个子串\(S[l,r]\)满足\([l,r]\subset[L,R]\)且\(f(l,r)\geq x\) 同时需要满足\(max(a[l..r])\)最小 求这个最小值,无解则输出-1 \(n,q\leq 50000\) Solution 这道题实际…
Description: p<=10且p是质数,n<=7,l,r<=1e18 题解: Lucas定理: \(C_{n}^m=C_{n~mod~p}^{m~mod~p}*C_{n/p}^{m/p}\) 若把\(n,m\)在p进制下分解,那么就是\(\prod C_{n[i]}^{m[i]}\). 对于\(∈[l,r]\)的限制先容斥为\(<=r\). 考虑从低位到高位的数位dp,设\(f[i][S][j]\)表示做了前i位,S[i]第i个数选的数是<=还是>,进了j位,的…
Description 给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串? Input 第一行两个整数n,k. 接下来n行每行一个字符串. Output 一行n个整数,第i个整数表示第i个字符串的答案. Sample Input 3 1 abc a ab Sample Output 6 1 3 HINT 对于 100% 的数据,1<=n,k<=10^5,所有字符串总长不超过10^5,字符串只包含小写字母. Solution 加分隔符建出后缀数组,考虑…
Description 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了一个长为n的字符串s,和m个问题.佳媛姐姐必须正确回答这m个问题,才能打开箱子拿到礼物,升职加薪,出任CEO,嫁给高富帅,走上人生巅峰.每个问题均有a,b,c,d四个参数,问你子串s[a..b]的所有子串和s[c..d]的最长公共前缀的长度的最大值是多少?佳媛姐姐并不擅长做这样的问题,所以她向你求助,你该如何帮助她呢? Input 输入的第一行有两个正整数n,m,分别表示字…
4556: [Tjoi2016&Heoi2016]字符串 Time Limit: 20 Sec  Memory Limit: 128 MB Description 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了 一个长为n的字符串s,和m个问题.佳媛姐姐必须正确回答这m个问题,才能打开箱子拿到礼物,升职加薪,出任CE O,嫁给高富帅,走上人生巅峰.每个问题均有a,b,c,d四个参数,问你子串s[a..b]的所有子串和s[c..d]的最长公 共…
$ \color{#0066ff}{ 题目描述 }$ 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了一个长为n的字符串s,和m个问题.佳媛姐姐必须正确回答这m个问题,才能打开箱子拿到礼物,升职加薪,出任CEO,嫁给高富帅,走上人生巅峰.每个问题均有a,b,c,d四个参数,问你子串s[a..b]的所有子串和s[c..d]的最长公共前缀的长度的最大值是多少?佳媛姐姐并不擅长做这样的问题,所以她向你求助,你该如何帮助她呢? \(\color{#00…
[HEOI2016] 字符串 Description 给定一个字符串 \(S\), 有 \(m\) 个询问,每个询问给定参数 \((a,b,c,d)\) ,求 \(s[a..b]\) 的子串与 \(s[c..d]\) 的最长公共前缀长度的最大值. Solution 读懂题意以后就很简单.把后缀数组和高度数组都搞出来,并对高度数组建立 ST 表,然后对于每个询问找到 \(s[c..d]\) 在后缀排序中的位置,二分一个 \(LCP\) 长度,检验只需要查询某一段下标区间内有没有 \(rank\)…
对S建SAM,拿着T在上面跑 跑的时候不仅无法转移要跳parent,转移过去不在范围内也要跳parent(注意因为范围和长度有关,跳的时候应该把长度一点一点地缩) 这样就能得到对于T的每个前缀,它最长的不合法的后缀的长度ill[i] 得到他要去重,以后可以再对T建SAM,然后对于每个节点,$ans+=max(0,len[i]-max(len[fa[i]],ill[pos[i]]))$,其中pos[i]是它的right集合中随便一个位置(因为每个位置的小于len的ill都一样) 那么怎么判在不在范…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4556 本来只要查 ht[ ] 数组上的前驱和后继就行,但有长度的限制.可以二分答案解决!然后用主席树查区间内的 ht[ ] 的前驱和后继即可.(主席树弄对 rk 的权值线段树) 在主席树上走的复杂度应该不会比二分然后查看主席树的 log2 更差吧. #include<cstdio> #include<cstring> #include<algorithm> usi…