[BZOJ]4199: [Noi2015]品酒大会(后缀数组+笛卡尔树)
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]品酒大会(后缀数组+笛卡尔树)相关推荐
- BZOJ.4199.[NOI2015]品酒大会(后缀自动机 树形DP)
BZOJ 洛谷 后缀数组做法. 洛谷上SAM比SA慢...BZOJ SAM却能快近一倍... 只考虑求极长相同子串,即所有后缀之间的LCP. 而后缀的LCP在后缀树的LCA处.同差异这道题,在每个点处 ...
- BZOJ 4199 [Noi2015]品酒大会(后缀自动机 + parent树上统计)
4199: [Noi2015]品酒大会 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1598 Solved: 905 [Submit][Stat ...
- [BZOJ4199][NOI2015]品酒大会-后缀数组
品酒大会 题目描述 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发"首席品酒家"和"首席猎手" ...
- UOJ #131 BZOJ 4199 luogu P2178【NOI2015】品酒大会 (后缀自动机、树形DP)
UOJ #131 BZOJ 4199 luogu P2178[NOI2015]品酒大会 (后缀自动机.树形DP) 水是水,但是写出了不少问题,因此写一发博客. https://www.luogu.or ...
- 洛谷P2178 [NOI2015]品酒大会 后缀数组+单调栈
P2178 [NOI2015]品酒大会 题目链接 https://www.luogu.org/problemnew/show/P2178 题目描述 一年一度的"幻影阁夏日品酒大会" ...
- 洛谷 P2178 [NOI2015]品酒大会 解题报告
P2178 [NOI2015]品酒大会 题目描述 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发"首席品酒家"和 ...
- [算法学习] 线段树,树状数组,数堆,笛卡尔树
都是树的变种,用途不同 [线段树 Interval Tree] 区间管理,是一种平衡树 可看做是对一维数组的索引进行管理.一维数组不需要是排序好的 深度不超过logL 任一个区间(线段)都分成不超过2 ...
- 【笛卡尔树】【树状数组】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 ...
- 【upc】扶桑号战列舰 | 笛卡尔树 、 差分数组
题目描述 众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据"个舰优越主义",建造了扶桑级战列舰,完工时为当时世界上武装最为强大的舰只. 同时,扶桑号战列舰 ...
最新文章
- 多解决些问题,少谈些框架和流程
- ubuntu安装openssl命令
- Linux 文件基本属性
- SCCM 2012系列之一 Operations Manager 关键概念
- 虎牙直播张波:掘金Nginx日志
- 2017腾讯编程题----游戏人物标记
- 动态添加html元素绑定事件,关于javascript:jQuery如何将onclick事件绑定到动态添加的HTML元素...
- [mybatis]缓存_缓存原理图
- 按条件分类_保税仓储企业能否同时存储非保货物?“仓储货物安装台分类监管”如何申请?...
- mysql查询某张表的所有外键_oracle中查询所有外键引用到某张表的记录
- C语言的Trim, LTrim, RTrim
- java浮点数除以0_为什么用浮点数(或双精度)将数字除以零不会在Java中抛出java.lang.Arithmetic...
- matlab ascii 异或,GPS数据包的ASCII异或校验和计算方法(VC++)
- java面向对象程序设计编程题,已拿到offer
- 【光学】基于matlab像面数字全息离轴干涉模拟【含Matlab源码 215期】
- office相关文件转pdf的几种方式
- NetSuite Account Register报表详解
- 个保法下个人信息委托处理活动合规要点
- 2022近视矫正展,护眼产品展,中国爱眼教育大会,验光设备展
- oracle asm磁盘标签丢失导致整个集群和数据库启动失败
热门文章
- python线程池传入多个参数_python线程池问题
- python神经网络库识别验证码_基于TensorFlow 使用卷积神经网络识别字符型图片验证码...
- 小肽相关1~peptidomic discovery of short open reading frame–encoded peptides in human cells
- mysql可以装到其他端口吗_linux下怎么在另一个端口安装高版本mysql
- cad2017怎么改变选择方式_诠网科技|企业网络推广方式要怎么选择?
- 怎样开图纸便宜_一步一步教你如何看懂工程图纸,值得收藏!
- 目标检测(十一)--ConvNets目标检测概述
- 图像局部特征(一)--概述
- python爬虫正则表达式爬取网页标签_Python爬虫实例(4)-用urllib、re和正则表达式爬取网页图片...
- Sleep 方案解决主备延迟