Description

Input

Output

Sample Input

Sample Output

HINT

Source
BZOJ无题面233
反正网上一堆自己下载叭>_<
对反串建SAM然后DP
第一问和AHOI2013差异完全一样
具体解法:
设Ans1[i]为lcp恰为i的后缀对数,Ans2[i]为lcp恰为i的后缀的价值乘积的最大值
建出SAM后,记录子树中后缀个数、价值的最大值、价值的最小值,然后O(n)DP即可
在SAM里DP完记得最后统计到Ans1和Ans2里去
size会爆int…一开始开的int一直WAWAWAWA…

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAXN 600100
#define LL long long
#define MAXINT 1ll<<60
using namespace std;
int n,top;
LL A[MAXN];
char ch[MAXN];
LL Ans1[MAXN],Ans2[MAXN];
struct edge
{int to;edge *next;
}e[MAXN<<1],*prev[MAXN];
void insert(int u,int v)
{e[++top].to=v;e[top].next=prev[u];prev[u]=&e[top];
}
void in(LL &x)
{char ch=getchar();x=0;int flag=1;while (!(ch>='0'&&ch<='9')) flag=ch=='-'?-1:1,ch=getchar();while (ch>='0'&&ch<='9')    x=x*10+ch-'0',ch=getchar();x*=flag;
}
struct sam
{int cnt,last,p,q,np,nq;int a[MAXN][26],len[MAXN],fa[MAXN];LL maxn[MAXN],minn[MAXN],ans1[MAXN],ans2[MAXN],size[MAXN];sam(){last=++cnt;}void insert(int c,int x){p=last;last=np=++cnt;len[np]=len[p]+1;size[np]=1;maxn[np]=minn[np]=A[x];while (!a[p][c]&&p) a[p][c]=np,p=fa[p];if (!p) fa[np]=1;else{q=a[p][c];if (len[q]==len[p]+1)   fa[np]=q;else{nq=++cnt;len[nq]=len[p]+1;maxn[cnt]=-MAXINT;minn[cnt]=MAXINT;memcpy(a[nq],a[q],sizeof(a[q]));fa[nq]=fa[q];fa[q]=fa[np]=nq;while (a[p][c]==q)  a[p][c]=nq,p=fa[p];}}}
}sam;
void dfs(int x)
{for (edge *i=prev[x];i;i=i->next){dfs(i->to);sam.ans1[x]+=sam.size[x]*sam.size[i->to];sam.size[x]+=sam.size[i->to];if (sam.maxn[x]!=-MAXINT)sam.ans2[x]=max(sam.ans2[x],sam.maxn[i->to]*sam.maxn[x]);if (sam.minn[x]!=MAXINT)sam.ans2[x]=max(sam.ans2[x],sam.minn[i->to]*sam.minn[x]);sam.maxn[x]=max(sam.maxn[x],sam.maxn[i->to]);sam.minn[x]=min(sam.minn[x],sam.minn[i->to]);}
}
int main()
{freopen("savour.in","r",stdin);freopen("savour.out","w",stdout);scanf("%d",&n);scanf("%s",ch);sam.maxn[1]=-MAXINT;sam.minn[1]=MAXINT;for (int i=1;i<=n;i++)  in(A[i]);for (int i=n;i;i--) sam.insert(ch[i-1]-'a',i);for (int i=0;i<=sam.cnt;i++)    sam.ans2[i]=-MAXINT;for (int i=1;i<=sam.cnt;i++)    insert(sam.fa[i],i);dfs(1);for (int i=0;i<n;i++)   Ans2[i]=-MAXINT;for (int i=1;i<=sam.cnt;i++)    Ans1[sam.len[i]]+=sam.ans1[i],Ans2[sam.len[i]]=max(Ans2[sam.len[i]],sam.ans2[i]);for (int i=n-2;i>=0;i--){Ans1[i]+=Ans1[i+1];if (Ans1[i+1])  Ans2[i]=max(Ans2[i],Ans2[i+1]);}for (int i=0;i<n;i++)   printf("%lld %lld\n",Ans1[i],Ans1[i]?Ans2[i]:0);
}

【NOI2015】【BZOJ4199】品酒大会相关推荐

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

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

  2. 【NOI2015】BZOJ4199品酒大会题解(SAM+树形DP)

    题目:BZOJ4199. 题目大意:给定一个字符串SSS,并给出一个长度为∣S∣|S|∣S∣的序列aia_iai​.现在设SiS_iSi​表示SSS以第iii个字符开始的后缀,对于每个0≤r<∣ ...

  3. 【NOI2015】品酒大会【后缀数组】【并查集】

    传送门 传送门 题意:给一个长度为NNN的字符串和一个长度为NNN的序列AAA,对于所有的k∈[0,N−1]k \in [0,N-1]k∈[0,N−1],求选出两个数i,ji,ji,j满足lcp(su ...

  4. NOI 2015 品酒大会

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

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

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

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

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

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

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

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

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

  9. [NOI2015]品酒大会

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

  10. [bzoj 4199][NOI 2015]品酒大会

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

最新文章

  1. Java项目:考试系统Java基础Gui(java+Gui)
  2. shell技巧之以逆序形式打印行
  3. ansible(基础)
  4. Xshell替代品 -- FinalShell
  5. springboot异步注解_Spring Boot 2 :Spring Boot 中的响应式编程和 WebFlux 入门
  6. 整理JS+FLASH幻灯片播放图片脚本代码
  7. CALL 和 ret 指令
  8. 哈夫曼算法(huffman algorithm C)
  9. 机器学习人才的职业薪酬也发展
  10. 如何优雅的输出PHP调试信息
  11. DVWA系列之20 反射型XSS分析
  12. FlashFXP如何破解
  13. PMP 成本计算相关
  14. 有别于普通专线的BGP线路
  15. 全文翻译 | 华为、北大、悉尼大学:最新视觉Transformer综述(2017-2020年)
  16. WIN32 opengl绘制一个点
  17. 「我是为“数据”去的京东」对话京东供应链首席科学家申作军
  18. 医药研发产业新平台在从化
  19. 小甲鱼python入门_python基础笔记(非系统/自用/参考小甲鱼的零基础入门学习python)上...
  20. 【.Net实用方法总结】 整理并总结System.IO中MemoryStream类及其方法介绍

热门文章

  1. ibatis中配置parameterClass=java.util.HashMap的用法
  2. c++虚函数实现原理
  3. 实体对齐 算法_[2017]Bootstrapping Entity Alignment with Knowledge Graph Embedding
  4. HTC ONE X刷ruu的详细刷机教程
  5. 2021-2022学年广州市育才实验学校九年级第一学期期中考试英语试题
  6. Seq2Seq模型及Attention机制
  7. 杨辉三角循环队列实现(数据结构c语言版)
  8. 虚拟机VMware中Linux联网
  9. python在手机上可以画图吗_python简单画图教程!python怎么在屏幕上画图
  10. 右键菜单“新建”的修改