当前位置: 首页 > news >正文

CF587F Duff is Mad

询问等价于 \(s_{l,...,r}\) fail 树上最终节点子树加,求 \(s\) 在 fail 树上所有点上的权值和。

区间询问,每次都跑一遍 \(O(q(n\log S+len\log S))\)\(len\) 为询问串的长度,\(S=\sum|s|\)

离线下来扫描线,将 \(ans_{[l,r]}\) 拆成 \(ans_{[1,r]}-ans_{1,l-1}\) 优化到 \(O(n\log S+qS\log S)\)

考虑根号分治,对所有 \(|s|\ge \sqrt S\) 的串直接预处理出所有 \(ans_{[1,i]}\) 预处理每个串复杂度为 \(O(n\log S+len\log S)\)。总复杂度 \(O(n\log S+nS\log S)\)

同一个串在 fail 树上的节点数有限,每次对每个点询问浪费了子树加很多信息。

对每一个串分开处理。

每次询问的点都是一样的,考虑将这些点的权值设为 \(1\),每个字符串对答案的贡献即为最终节点子树权值和。而子树权值和直接 \(O(S)\) 预处理,能将复杂度降为 \(O(S+n)\)

而这种串个数为 \(O(\sqrt S)\) 量级的,总复杂度 \(O((S+n)\sqrt S)\)

剩下的按照原本的做法即可,复杂度 \(O(n\log S+q\sqrt S\log S)\)

总复杂度 \(O((s+n)\sqrt S+n\log S+q\sqrt S \log S)\)。大概是 5e8 量级。

Takanashi Rikka
// Problem: CF587F Duff is Mad
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/CF587F
// Memory Limit: 250 MB
// Time Limit: 4000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define ll long long
#define pii pair<int,int>
#define mp make_pair
#define intz(x,z) memset((x),(z),sizeof((x)))
#define cfast ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
inline ll lowbit(ll x){return x&-x;}
#define fi first
#define se second
#define l(x) (x).size()
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
inline void cmx(auto &x,ll y){if(y>x)x=y;}
inline void cmn(auto &x,ll y){if(y<x)x=y;}
const int N=1e5+5;
#define int ll
int lst[N],ct,siz[N],t[N][26],tot=1,f[N],tr[N],ed[N],ans[N],dfn[N],d[N];
string S[N];
vector<int>w,e[N],s[N];
vector<pii>q[N];
int add(string s){int u=1;for(int i=0,p;i<l(s);u=t[u][p],i++)if(!t[u][p=(s[i]-'a')])t[u][p]=++tot,lst[tot]=u;return u;
}
void build(){queue<int>dl;for(int i=0;i<26;i++)if(t[1][i])f[t[1][i]]=1,dl.push(t[1][i]);else t[1][i]=1;while(!dl.empty()){int u=dl.front();dl.pop();for(int i=0;i<26;i++)if(t[u][i])f[t[u][i]]=t[f[u]][i],dl.push(t[u][i]);else t[u][i]=t[f[u]][i];}
}
void add(int u,int d){for(;u<=tot;u+=lowbit(u))tr[u]+=d;}
int ask(int u){int res=0;for(;u;u-=lowbit(u))res+=tr[u];return res;}
void dfs(int u,int fa){dfn[u]=++ct,siz[u]=1;for(int v:e[u])if(v^fa)dfs(v,u),siz[u]+=siz[v];
}
int sz[N];
void dfs1(int u,int fa){for(int v:e[u])if(v^fa)dfs1(v,u),sz[u]+=sz[v];
}
void UesugiErii(){int n,m,L=0,B;cin>>n>>m;for(int i=1;i<=n;i++)cin>>S[i],ed[i]=add(S[i]),L+=l(S[i]);B=sqrt(L);for(int i=1;i<=n;i++)if(l(S[i])>=B)w.pb(i);for(int i=0;i<=n;i++)s[i].resize(l(w)+5);build();for(int i=1;i<=tot;i++)e[f[i]].pb(i);dfs(1,0);// for(int i=1;i<=tot;i++)// cout<<dfn[i]<<'\n';int c=0;for(int i:w){d[i]=++c,intz(sz,0);int u=ed[i];for(;u!=1;u=lst[u])sz[u]=1;dfs1(1,0);for(int id=1,j;id<=n;id++)j=ed[id],s[id][c]=s[id-1][c]+sz[ed[id]];}for(int l,r,k,_=1;_<=m;_++){cin>>l>>r>>k;if(l(S[k])>=B)ans[_]=s[r][d[k]]-s[l-1][d[k]];else q[l-1].pb(mp(_,-k)),q[r].pb(mp(_,k));}for(int id=1,i;id<=n;id++){i=ed[id],add(dfn[i],1),add(dfn[i]+siz[i],-1);for(pii j:q[id]){int p=j.se,res=1,sum=0;if(p<0)p=-p,res=-1;for(int u=ed[p];u!=1;u=lst[u])sum+=ask(dfn[u]);ans[j.fi]+=res*sum;}}for(int i=1;i<=m;i++)cout<<ans[i]<<'\n';
}
signed main(){//cfast;int _=1;//cin>>_;for(;_;_--)UesugiErii();return 0;
}
http://www.jsqmd.com/news/106202/

相关文章:

  • 利用wan2.1协议快速构建网络通信原型
  • 用 Go 像写 Web 一样做桌面应用:完全离线的手机号归属地查询工具
  • AI助力SpringBoot+MyBatisPlus开发:自动生成CRUD代码
  • websocket功能开发
  • STM32HAL库读取ADS1115驱动
  • 任务5-2 关联查询和子查询
  • 分布式电源接入对配电网影响分析 关键词:分布式电源 配电网 评估 参考文档:《自写文档,联系我...
  • 源网荷储充一体化平台:安科瑞EMS微电网能源管理系统介绍
  • HoughLinesP 霍夫变换 C#x2B;#x2B; opencv 内存报错处理
  • Day4 9. 奇怪的信 -卡码网C++基础课
  • Python - UV 为每个项目创建独立、干净的Python工作空间
  • 测试决策的心理因素:在认知偏差与专业判断间寻找平衡
  • 上海防水补漏上门维修服务哪家好?认准芮生建设,14年专业团队守护安居 - shruisheng
  • 33、Linux线程同步与互斥
  • TestDisk数据恢复实战:从分区丢失到文件找回的完整指南
  • 使用 C# 将 DataTable 和 Excel 数据互转
  • 完整教程:SQL常用语句解析:从查询到操作
  • MySQL架构长啥样?
  • 【计算机毕业设计案例】基于springboot+微信小程序的选修课管理系统的设计与实现“课程查询-在线选课-课表管理-成绩追踪”(程序+文档+讲解+定制)
  • 3个关键步骤解决JimuReport报表组件依赖配置难题
  • 上海专业做室外防水 选芮生建设 14年经验守护建筑外墙屋顶不漏 - shruisheng
  • FPGA在AI时代的角色重塑:硬件可重构性与异构计算的完美结合
  • AI如何帮助开发者防御DDoS攻击?
  • 2025 年最新客服机器人品牌有哪些,看这一篇就够了 - 品牌策略主理人
  • WSL2 多 GPU CUDA 初始化问题排查与解决指南
  • AI学习机是智商税吗?实测告诉你真相+2025年推荐清单 - 品牌测评鉴赏家
  • zzRAG 的检索优化:MMR 平衡相关性与多样性
  • 突破与变革:2026年AI领域的技术创新与新机会
  • day40复习日@浙大疏锦行
  • GEO优化实战指南:如何让品牌在AI搜索中被优先引用