题目:https://loj.ac/problem/6031
题解:对k进行分治。
k小时用莫队维护处[a,b]中每个区间贡献次数c[l][r],
再暴力枚举区间统计答案。
k大时询问次数少,所以对于每个询问串预处理匹配,再暴力枚举【a,b】统计答案
相当于在pnt树上倍增跳找合适长度的right集合
注意:跳pnt后匹配长度不一定等于当前节点的val,需要对已匹配长度取min
莫队很容易打错边界,特别是l和r的贡献到底统计没。并且cnt数组要清空
sam写在struct里面,注意last=np不能是nq
数据分治的题分开调,写了2h10分钟我真的好菜,QaQ
#include<bits/stdc++.h>
using namespace std;
#define maxn 200020
typedef long long ll;
int n,m,q,k,sz,cnt[1020][1020],match[maxn],len[maxn];
char ch[maxn];
ll ans[maxn];
struct SAM{
int

最低0.47元/天 解锁文章

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



