从\(ckw\)博客上看来的题目,可能是正睿oj上的,但我想我这样没有氪金的自然是写不了的,就口胡一波吧

题意:给定一个字符串,多组询问,每次询问一个子串的权值;一个字符串的权值定义为这个字符串里出现次数超过\(1\)次且长度最大的子串的长度,\(n,m\leq 100000\)

首先这个东西具有单调性,我们显然可以二分

对于一次询问\([l,r]\),我们二分出来的长度是\(mid\)

如果\([l+mid-1,r]\)这个区间里有两个前缀的\(LCS\)长度大于\(mid\)我们就可以断定答案可以更大

所以我们现在需要求一个区间内两两\(LCS\)的最大值

这让我们想到了这道题

考虑到两个前缀\(LCS\)等于这两个前缀对应节点在\(parent\)树上的\(lca\)的\(len\)

于是我们启发式合并\(set\),每次把一个\(set\)往另一个\(set\)里暴力插入得时候查一下前驱和后继,因为那些距离当前位置更远的显然不如前驱或者后继更优,更容易被计入答案;这样就得到了\(nlogn\)个形如\((l,r,v)\)的三元组,表示\(l\)前缀和\(r\)前缀的\(LCS\)是\(v\)

现在我们可以直接在树套树数点,复杂度高达\(4\)个\(log\)显然不可写,考虑离线

我们将所有三元组以及询问都按照右端点排序,我们显然可以保证在处理一个询问之前把所有右端点小于它的三元组的左端点都加入到一棵线段树里去

处理询问的时候二分长度去线段树上查左端点大于\(l-mid+1\)的最大值就好了

我应该没有胡错吧

最新文章

  1. C# ~ 泛型委托
  2. IOS页面自动布局 之 NSLayoutConstraint基础篇
  3. 18SpringMvc_在业务控制方法中收集数组参数
  4. linux下复制一个文件的内容到另一个文件
  5. UML: 协作图
  6. [MySQL] 数据统计 —— 按周,按月,按日分组统计数据
  7. [置顶] a+=1/a=+1/a-=1区别-c语言
  8. 简单Mysql思维导图
  9. C语言——strlen()和sizeof的区别
  10. c++中派生类对基类成员的三种访问规则(转)
  11. 8.DNS :域名系统
  12. 04 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之高并发优化
  13. PHP中关于foreach的简单的用法总结
  14. APM的3DR无线数传的安装和调试
  15. class-dump在osx 10.11以后安装方法
  16. 【学习笔记】--- 老男孩学Python,day7 python中is 和 == 的区别 encode decode
  17. php 进度条
  18. Bootstrap-CL:警告
  19. hello java !
  20. 小y的质数

热门文章

  1. Android studio删除工程项目
  2. Computer - 在VM7虚拟机中使用主机打印机
  3. [日常] Go语言圣经-文本和HTML模板习题
  4. .net防止SQL注入的一种方式
  5. avalonjs 实现简单购物车
  6. js-ES6学习笔记-编程风格(2)
  7. (1)H5实现音乐播放器【正在播放-歌词篇】
  8. windows下安装composer方法
  9. 图像矫正-基于opencv实现
  10. 学习笔记(2)——实验室集群LVS配置