Time Limit: 10 Sec  Memory Limit: 512 MB

Description

Input

Output

Sample Input

10
ponoiiipoi
2 1 4 7 4 8 3 6 4 7

Sample Output

45 56
10 56
3 32
0 0
0 0
0 0
0 0
0 0
0 0
0 0

HINT

Solution

  先求出后缀数组,两个后缀的最长公共前缀是它们之间height的最小值,对height建笛卡尔树,树上维护最大最小值即可。

Code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
inline int read()
{int x,f=1;char c;while((c=getchar())<'0'||c>'9')if(c=='-')f=0;for(x=c-'0';(c=getchar())>='0'&&c<='9';)x=x*10+c-'0';return f?x:-x;
}
#define MN 300000
int v[MN+5],ar[MN*4+10],*sa=ar,*nsa=sa+MN+2,*rk=nsa+MN+2,*nrk=rk+MN+2,h[MN+5];
int a[MN+5],z[MN+5],zn,lc[MN+5],rc[MN+5],sz[MN+5],mx[MN+5],mn[MN+5];
ll f1[MN+5],f2[MN+5];
char s[MN+5];
void dfs(int x)
{if(!x)return;int l=lc[x],r=rc[x];dfs(l);dfs(r);if(!l)l=MN+1,sz[l]=1,mx[l]=mn[l]=a[sa[x-1]];if(!r)r=MN+2,sz[r]=1,mx[r]=mn[r]=a[sa[x]];f1[h[x]]+=1LL*sz[l]*sz[r];f2[h[x]]=max(f2[h[x]],max(max(1LL*mn[l]*mn[r],1LL*mn[l]*mx[r]),max(1LL*mx[l]*mn[r],1LL*mx[l]*mx[r])));sz[x]=sz[l]+sz[r];mn[x]=min(mn[l],mn[r]);mx[x]=max(mx[l],mx[r]);
}
int main()
{int n=read(),l,i,x;scanf("%s",s+1);for(i=1;i<=n;++i)a[i]=read();for(i=1;i<=n;++i)++v[s[i]];for(i='a';i<='z';++i)v[i]+=v[i-1];for(i=1;i<=n;++i)sa[v[s[i]]--]=i;for(i=1;i<=n;++i)rk[sa[i]]=rk[sa[i-1]]+(s[sa[i]]!=s[sa[i-1]]);for(l=1;l<n;l<<=1,swap(sa,nsa),swap(rk,nrk)){for(i=1;i<=n;++i)v[rk[sa[i]]]=i;for(i=n;i;--i)if(sa[i]>l)nsa[v[rk[sa[i]-l]]--]=sa[i]-l;for(i=0;i<l;++i)nsa[v[rk[n-i]]--]=n-i;for(i=1;i<=n;++i)nrk[nsa[i]]=nrk[nsa[i-1]]+(rk[nsa[i]]!=rk[nsa[i-1]]||rk[nsa[i]+l]!=rk[nsa[i-1]+l]);}for(i=1,l=0;i<=n;++i,l?--l:0)if(rk[i]>1){for(x=sa[rk[i]-1];s[i+l]==s[x+l];++l);h[rk[i]]=l;}for(i=2;i<=n;++i){while(zn&&h[i]<h[z[zn]])lc[i]=z[zn--];rc[z[zn]]=i;z[++zn]=i;}memset(f2,200,sizeof(f2));dfs(z[1]);for(i=n;i--;)f1[i]+=f1[i+1],f2[i]=max(f2[i],f2[i+1]);for(i=0;i<n;++i)printf("%lld %lld\n",f1[i],f1[i]?f2[i]:0);
}

转载于:https://www.cnblogs.com/ditoly/p/BZOJ4199.html

[BZOJ]4199: [Noi2015]品酒大会(后缀数组+笛卡尔树)相关推荐

  1. BZOJ.4199.[NOI2015]品酒大会(后缀自动机 树形DP)

    BZOJ 洛谷 后缀数组做法. 洛谷上SAM比SA慢...BZOJ SAM却能快近一倍... 只考虑求极长相同子串,即所有后缀之间的LCP. 而后缀的LCP在后缀树的LCA处.同差异这道题,在每个点处 ...

  2. BZOJ 4199 [Noi2015]品酒大会(后缀自动机 + parent树上统计)

    4199: [Noi2015]品酒大会 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 1598  Solved: 905 [Submit][Stat ...

  3. [BZOJ4199][NOI2015]品酒大会-后缀数组

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

  4. UOJ #131 BZOJ 4199 luogu P2178【NOI2015】品酒大会 (后缀自动机、树形DP)

    UOJ #131 BZOJ 4199 luogu P2178[NOI2015]品酒大会 (后缀自动机.树形DP) 水是水,但是写出了不少问题,因此写一发博客. https://www.luogu.or ...

  5. 洛谷P2178 [NOI2015]品酒大会 后缀数组+单调栈

    P2178 [NOI2015]品酒大会 题目链接 https://www.luogu.org/problemnew/show/P2178 题目描述 一年一度的"幻影阁夏日品酒大会" ...

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

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

  7. [算法学习] 线段树,树状数组,数堆,笛卡尔树

    都是树的变种,用途不同 [线段树 Interval Tree] 区间管理,是一种平衡树 可看做是对一维数组的索引进行管理.一维数组不需要是排序好的 深度不超过logL 任一个区间(线段)都分成不超过2 ...

  8. 【笛卡尔树】【树状数组】Beautiful Pair(P4755)

    正题 P4755 题目大意 给你n个数,问你有多少对二元组 (i,j)(i,j)(i,j) 满足 i≤ji\leq ji≤j 且 ai×aj≤maxi=ijaia_i\times a_j\leq ma ...

  9. 【upc】扶桑号战列舰 | 笛卡尔树 、 差分数组

    题目描述 众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据"个舰优越主义",建造了扶桑级战列舰,完工时为当时世界上武装最为强大的舰只. 同时,扶桑号战列舰 ...

最新文章

  1. 多解决些问题,少谈些框架和流程
  2. ubuntu安装openssl命令
  3. Linux 文件基本属性
  4. SCCM 2012系列之一 Operations Manager 关键概念
  5. 虎牙直播张波:掘金Nginx日志
  6. 2017腾讯编程题----游戏人物标记
  7. 动态添加html元素绑定事件,关于javascript:jQuery如何将onclick事件绑定到动态添加的HTML元素...
  8. [mybatis]缓存_缓存原理图
  9. 按条件分类_保税仓储企业能否同时存储非保货物?“仓储货物安装台分类监管”如何申请?...
  10. mysql查询某张表的所有外键_oracle中查询所有外键引用到某张表的记录
  11. C语言的Trim, LTrim, RTrim
  12. java浮点数除以0_为什么用浮点数(或双精度)将数字除以零不会在Java中抛出java.lang.Arithmetic...
  13. matlab ascii 异或,GPS数据包的ASCII异或校验和计算方法(VC++)
  14. java面向对象程序设计编程题,已拿到offer
  15. 【光学】基于matlab像面数字全息离轴干涉模拟【含Matlab源码 215期】
  16. office相关文件转pdf的几种方式
  17. NetSuite Account Register报表详解
  18. 个保法下个人信息委托处理活动合规要点
  19. 2022近视矫正展,护眼产品展,中国爱眼教育大会,验光设备展
  20. oracle asm磁盘标签丢失导致整个集群和数据库启动失败

热门文章

  1. python线程池传入多个参数_python线程池问题
  2. python神经网络库识别验证码_基于TensorFlow 使用卷积神经网络识别字符型图片验证码...
  3. 小肽相关1~peptidomic discovery of short open reading frame–encoded peptides in human cells
  4. mysql可以装到其他端口吗_linux下怎么在另一个端口安装高版本mysql
  5. cad2017怎么改变选择方式_诠网科技|企业网络推广方式要怎么选择?
  6. 怎样开图纸便宜_一步一步教你如何看懂工程图纸,值得收藏!
  7. 目标检测(十一)--ConvNets目标检测概述
  8. 图像局部特征(一)--概述
  9. python爬虫正则表达式爬取网页标签_Python爬虫实例(4)-用urllib、re和正则表达式爬取网页图片...
  10. Sleep 方案解决主备延迟