非常基础的SAMSAMSAM题目。
假设给你了S1S_1S1,那么显然非常好求,随便怎么搞都行。
字典序这玩意也非常好翻译啊,直接枚举前缀LCSLCSLCS就完了。
然后就是实现细节。乍一看这玩意要线段树合并,还要可持久化啊 直接把我劝退了 。不过如果固定了rrr就非常好做,因此直接一波离线即可。
很久没打这种数据结构了
一遍过了,就很离谱。要是考场上有这手感还愁打不出来数据结构???
#include<bits/stdc++.h>
#define pb push_back
#define fi first
#define se second
#define ll long long
using namespace std;
const int N=4e5+5;
int Q,n,tot,last,L[N],R[N],ed[N];
int num,dfn[N],sz[N],id[N];
string s;
string q[200005];
string ans[200005];
vector<int>G[N];
vector<int>g[N];
struct node{
int link,len,to[26];
}t[N];
void extend(char c){
int cur=++tot;
t[cur].len=t[last].len+1;
int p=last;
while(p!=-1&&!t[p].to[c-'a']){
t

本文介绍了一种基于SAM(SuffixAutomaton)的数据结构解决字符串相关问题的方法,特别是关于字典序和最长公共前后缀(LCS)的查询。文章提到,在固定右边界的情况下,问题可以通过离线处理简化,避免了使用线段树合并的复杂性。代码示例展示了如何构建和操作SAM来高效地处理这些查询。
最低0.47元/天 解锁文章
941

被折叠的 条评论
为什么被折叠?



