首页 > 其他分享 >【模板】Runs

【模板】Runs

时间:2024-11-15 21:56:28浏览次数:1  
标签:Runs int tr back stk tl ans 模板

学习资料:Lyndon & Runs - 洛谷专栏。yyc 讲的太好了啊,我就不抄了。

做 Lyndon 分解的 Duval 算法在 Runs 的求解中出现次数非常高,请一定记住它。

if (tl + tr >= r - l + 1) 这一行是算的刚刚好的,这里对应的 Lyndon Root 是 \([l, r)\),然后求出 lcp,lcs 分别是 \(tl, tr\),则这个 run 的左右端点为 \([l - tl + 1, r + tr - 1]\),所以 \(r+tr-1-l+tl-1+1\geq 2(r-l)\) 刚好化简为 \(tl+tr\geq r-l+1\),很不牛的。

点击查看代码

machine 在 【模板】后缀数组 SA - caijianhong - 博客园 的第一个折叠框有,就不重复放了,完整代码自寻 Submissions 2201609 - LibreOJ

struct run {
  int l, r, p;
  bool operator<(const run& rhs) const {
    return l != rhs.l ? l < rhs.l : r < rhs.r;
  }
  bool operator==(const run& rhs) const {
    return l == rhs.l && r == rhs.r && p == rhs.p;
  }
};
vector<run> getRuns(string s) {
  int n = (int)s.size();
  auto lcp = machinenew(s);
  reverse(begin(s), end(s));
  auto lcs = machinenew(s);
  reverse(begin(s), end(s));
  s += '\0';
  vector<run> ans;
  for (int op : {0, 1}) {
    vector<int> stk;
    for (int i = n - 1; i >= 0; i--) {
      while (!stk.empty()) {
        int u = i, v = stk.back(), len = lcp(u, v);
        if ((s[u + len] < s[v + len]) == op) stk.pop_back();
        else break;
      }
      if (!stk.empty()) {
        int l = i, r = stk.back(), tr = lcp(l, r), tl = lcs(n - l - 1, n - r - 1);
        if (tl + tr >= r - l + 1) ans.push_back({.l = l - tl + 1, .r = r + tr - 1, .p = r - l});
      }
      stk.push_back(i);
    }
  }
  auto bg = begin(ans), ed = end(ans);
  sort(bg, ed), ans.erase(unique(bg, ed), ed);
  return ans;
}

标签:Runs,int,tr,back,stk,tl,ans,模板
From: https://www.cnblogs.com/caijianhong/p/18548743

相关文章

  • 【Axure模板素材】白蓝灰配色精美后台 M2
    【Axure】白蓝灰配色精美后台M2AxureMost官网【Axure】白蓝灰配色精美后台M2-AxureMost模版定位致力于实用的移动端、桌面端模版,拿到即可开展工作。没有多余的杂乱页面移动端我们会采集国内市面上100+的界面进行行业划分和汇总页面,复刻物美的UI界面进行模版制作......
  • 发一段简洁大气的404纯代码错误页的模板,有需要的直接复制拿走
    ​ 分享一段简洁大气的404纯代码错误页的模板,有需要的直接复制拿走。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0">......
  • 三、模板与配置(下)
    三、模板与配置8、WXSS模板样式-全局样式和局部样式类型说明适用情景注意点全局样式定义在app.wxss中的样式,作用于每一个页面。当有一些通用的样式规则需要应用于整个小程序时,比如全局的字体大小、颜色、布局等。全局样式可能会被局部样式覆盖,需要注意样式的优先级。当......
  • [c/cpp]:模板指针
    [c/cpp]:模板指针    一、程序代码1#include<iostream>234intmsg(intx)5{6std::cout<<"\t[msg]#\tx:="<<x<<std::endl;7returnx;8}91011//generalpointer12int(*fun)(int);1314......
  • STL标准模板库c++
    STL:广义上分为:容器,算法,迭代器容器与算法间通过迭代器进行无缝连接。STL六大组件,分别是容器,算法,迭代器,仿函数,适配器,空间配置器。vector容器可以理解为数组;为单端数组,区别在于数组为静态空间,而vector可以动态扩展动态扩展:不是在原空间下,找到更......
  • 原生鸿蒙政务行业应用开发模板上线,近200个政务服务应用已上架
    一直以来,发展新质生产力对数字政府建设意义重大。华为原生鸿蒙之夜暨华为全场景新品发布会上,华为宣布从底座上全面突破操作系统的核心技术,实现了操作系统的自主可控。截至发布会,鸿蒙原生应用和元服务上架数已突破1.5万个,已有180余个政务服务一网通办平台、公积金类、医保服务类和......
  • C++继承和参数化类型(模板)各自的优点
    在C++中,继承和参数化类型(模板)都是强大的代码重用机制,它们各自具有独特的优点。以下是对这两种机制优点的比较和归纳:C++继承的优点代码重用:继承允许子类继承父类的属性和方法,从而避免了重复编写相同的代码。这不仅提高了开发效率,还减少了代码中的冗余。扩展性:通过继承,可以创建......
  • 免费HTML模板和CSS样式网站汇总
    HTML模板:(注意版权,部分不可商用)1、Tooplate,免费HTML模板下载Download60+FreeHTMLTemplatesforyourwebsitesDownload60+freeHTMLwebsitetemplatesorresponsiveBootstraptemplatesinstantlyfromTooplatehttps://www.tooplate.com/free-templates选中模板......
  • 亚马逊铺货、跟卖之FBM配送模板的设置与应用-基于月亮树跨境AI自动调价插件综合运用的
    背景亚马逊后台的展示界面频繁出现问题,导致许多做铺货和跟卖的小伙伴在使用FBM(自发货)模式时,有时会遇到运费无法正常显示的情况。而在购物车界面才会显示运费久而久之,会出现这样的业务诉求:“我这里有4个商品,其中有2个想设置成免运费的模式。”将亚马逊配送模板设置好了,配......
  • lca模板
    https://www.luogu.com.cn/problem/P1967#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'#definexfirst#defineysecondusingnamespacestd;constintN=6e4+10,mod=998244353;constintLOGN=20;typedefpair<int,int......