题目传送门:loj#2133 luoguP2178

  简要题意:给定一个字符串\(s\),每个后缀都有权值,对于每个长度\(len\),求出所有最长公共前缀\(\geq len\)的后缀对的总数和每个这样的后缀对,两后缀权值乘积的最大值。

  我们可以先把后缀数组求出来,把最长公共前缀长度转化为height数组的区间\(\min\),考虑固定\(len\),容易发现合法的后缀对的取值范围被height数组上小于\(len\)的位置划分成了若干区间,同时当\(len\)变小的时候,相邻区间会发生合并。

  于是倒序枚举\(len\),用并查集辅助合并合法区间,同时统计贡献就可以解决问题了。

my code

```cpp
#include
#include
#include
#include
#include
#define ll long long
#define inf 0x3f3f3f3f
#define maxn 300010
inline ll read()
{
ll x=0; char c=getchar(),f=1;
for(;clen)tsa[++tot]=sa[i]-len;
memset(sum,0,sizeof(sum));
memcpy(trk,rk,sizeof(rk));
for(int i=1;i1){
lcp[rk[i]]=std::max(lcp[rk[i-1]]-1,0);
while(s[i+lcp[rk[i]]]==s[sa[rk[i]-1]+lcp[rk[i]]])++lcp[rk[i]];
}
}
bool cmp(int x,int y){return lcp[x]>lcp[y];}
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
void modify(int now)
{
int p1=find(now-1),p2=find(now);
fa[p1]=p2;
tot-=(ll)(r[p1]-l[p1]+1)*(r[p1]-l[p1])/2+(ll)(r[p2]-l[p2]+1)*(r[p2]-l[p2])/2;
l[p2]=l[p1];
if(mx1[p1]>mx1[p2]){
int t1=mx1[p1],t2=std::max(mx1[p2],mx2[p1]);
mx1[p2]=t1; mx2[p2]=t2;
}
else{
int t1=mx1[p2],t2=std::max(mx1[p1],mx2[p2]);
mx1[p2]=t1; mx2[p2]=t2;
}
if(mn1[p1]=0;i--){
while(now=i)modify(id[now++]);
cnt[i]=tot; mx[i]=cur;
}
for(int i=0;i

【loj#2133 && luoguP2178】[NOI2015]品酒大会的更多相关文章

  1. luoguP2178 [NOI2015]品酒大会(后缀数组做法)

    题意 因为一个\(k\)相似必定为\(k-1,k-2....0\)相似,对于一个\(lcp\)为\(k\)后缀对\((i,j)\),我们只用把它的贡献加在\(k\)的答案上,最后求一个后缀和和后缀ma ...

  2. luoguP2178 [NOI2015]品酒大会(后缀自动机)

    题意 承接上篇题解 考虑两个后缀的\(lcp\)是什么,是将串反着插入后缀自动机后两个前缀(终止节点)的\(lca\)!!!于是可以在parent tree上DP了. 比后缀数组又简单又好写跑的还快. ...

  3. BZOJ 4199: [Noi2015]品酒大会 [后缀数组 带权并查集]

    4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 ...

  4. [UOJ#131][BZOJ4199][NOI2015]品酒大会 后缀数组 + 并查集

    [UOJ#131][BZOJ4199][NOI2015]品酒大会 试题描述 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个 ...

  5. 洛谷 P2178 [NOI2015]品酒大会 解题报告

    P2178 [NOI2015]品酒大会 题目描述 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发"首席品酒家"和 ...

  6. 【BZOJ4199】[Noi2015]品酒大会 后缀数组+并查集

    [BZOJ4199][Noi2015]品酒大会 题面:http://www.lydsy.com/JudgeOnline/wttl/thread.php?tid=2144 题解:听说能用SAM?SA默默 ...

  7. [UOJ#131][BZOJ4199][NOI2015]品酒大会

    [UOJ#131][BZOJ4199][NOI2015]品酒大会 试题描述 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个 ...

  8. BZOJ_4199_[Noi2015]品酒大会_后缀自动机

    BZOJ_4199_[Noi2015]品酒大会_后缀自动机 Description 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 酒家”和“首席 ...

  9. [NOI2015]品酒大会(SA数组)

    [NOI2015]品酒大会 题目描述 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发"首席品酒家"和" ...

随机推荐

  1. Python中elasticsearch插入和更新数据的实现方法

    Python中elasticsearch插入和更新数据的实现方法 这篇文章主要介绍了Python中elasticsearch插入和更新数据的实现方法,需要的朋友可以参考下 首先,我的索引结构是酱紫的. ...

  2. mud那些坑 find_object问题

    find_object  find_object 没有找到对象时  实际上会load_obejct 一次,需要设定一个标记表示 find_obejct 找出来的 对象和需要对比的对象有什么不同 只要n ...

  3. PHPCMS全局自定义函数 获取用户信息的办法

    在这个文件中增加即可\phpcms\libs\functions\global.func.php /** * 获取当前登陆者的信息 * @param $f 取什么字段F就传什么值 */ functio ...

  4. Spring Aop(二)——基于Aspectj注解的Spring Aop简单实现

    转发地址:https://www.iteye.com/blog/elim-2394762 2 基于Aspectj注解的Spring Aop简单实现 Spring Aop是基于Aop框架Aspectj实 ...

  5. DB2的web可视化客户端工具

    DB2 是IBM公司的产品,目前在银行等金融行业还在大量使用, DB2的客户端工具太,并且难用,这是一直为人所垢病的,  现在TreeSoft数据库管理系统已支持DB2了,直接在浏览器中就可以操作查看 ...

  6. vue项目中使用v-for的方法莫名提示错误

    错误示例: 解决方法一: 在v-for后面绑定key,示例如下→ 解决方法二: 点击左下角“设置”>“用户设置”内添加一下代码片段: { "vetur.validation.templ ...

  7. Java程序员壁纸-Java开发

  8. sws office-强大小巧的开源office

    sws office是一款由国际软件分享组织于2019年刚刚开发完成的一个开源office,目的是为了响应CR2019的号召,开发一个体积只有2.2MB,占用内存小,运行速度极快的office,它支持 ...

  9. Centos6.5搭建方法

    # VSFTP # ## ###安装 vsftp     yum install vsftpd* -y ###启动服务     /etc/init.d/vsftpd restart ###配置     ...

  10. SQL中的关键词

    AS的用法及妙用 https://www.cnblogs.com/zhaotiancheng/p/6692553.html