考前挣扎(bu shi

之前留下来的坑

首先注意到 SAM的parent树 是反串的后缀树 也就是原串的前缀树

这个性质很重要 所以说我们在树上统计的时候两个点的lca就是两个后缀串的lcp 于是可以替代后缀数组(嘿嘿嘿

然后嘞我们树形dp 统计的size就是以这个串为前缀的子串个数

然后我们通过差分【最后后缀和 来进行统计对数

树形dp维护mn mx来进行查询最大 【有负所以要维护mn

这个最后还是要后缀max 但小心别把零转移过来

然后写写写 洛谷就过掉了

UOJ的hack数据真的吼2333

初始化的时候别忘了把0也清掉~

//Love and Freedom.
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define mxn 1200000
#define inf 2002122500
#define ll long long
using namespace std; struct node
{
int len,ch[26],fa,val,sz;
}t[mxn];
int lt,poi,rt;
struct edge{int to,lt;}e[mxn];
int in[mxn],cnt,a[mxn];
void add(int x,int y)
{
e[++cnt].to=y; e[cnt].lt=in[x]; in[x]=cnt;
}
void insert(int c,int v)
{
int p = lt, np = lt = ++poi; t[np].len = t[p].len+1; t[np].val = v; t[np].sz = 1;
for(;p && !t[p].ch[c]; p = t[p].fa) t[p].ch[c] = np;
if(!p){t[np].fa = rt; return;}
int q = t[p].ch[c];
if(t[q].len == t[p].len+1){t[np].fa = q;return;}
int nq = ++poi; t[nq].len = t[p].len+1;
memcpy(t[nq].ch,t[q].ch,sizeof(t[nq].ch));
t[nq].fa = t[q].fa; t[q].fa = t[np].fa = nq;
for(;p && t[p].ch[c] == q; p = t[p].fa) t[p].ch[c] = nq;
}
void build()
{
for(int i=2;i<=poi;i++) add(t[i].fa,i);
}
int mx[mxn],mn[mxn],sz[mxn],val[mxn];ll ans1[mxn],ans2[mxn];
void dfs(int x)
{
sz[x] = t[x].sz; val[x] = t[x].val;
if(sz[x]) mx[x] = mn[x] = val[x];
else mx[x] = -inf,mn[x] = inf;
for(int i=in[x];i;i=e[i].lt)
{
int y = e[i].to;
dfs(y);
if(mn[x]!=inf && mn[y]!=inf)
ans1[t[x].len] = max(ans1[t[x].len],max((ll)mn[x]*mn[y],(ll)mx[x]*mx[y]));
ans2[t[x].len] += (ll)sz[x]*sz[y];
sz[x] += sz[y];
mx[x] = max(mx[x],mx[y]);
mn[x] = min(mn[x],mn[y]);
}
}
char ch[mxn];
int main()
{
int n;
scanf("%d",&n);
scanf("%s",ch+1);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
rt = lt = poi = 1;
for(int i=n;i;i--)
insert(ch[i]-'a',a[i]),ans1[i] = -(ll)inf*inf;
ans1[0] = -(ll)inf*inf;
build();
dfs(rt);
for(int i=n;~i;i--)
{
ans2[i] += ans2[i+1];
if(ans2[i+1])
ans1[i] = max(ans1[i],ans1[i+1]);
}
for(int i=0;i<n;i++)
{
if(!ans2[i]) printf("%d %d\n",0,0);
else printf("%lld %lld\n",ans2[i],ans1[i]);
}
return 0;
}

UOJ131 [NOI2015] 品酒大会的更多相关文章

  1. BZOJ4199/UOJ131 [Noi2015]品酒大会

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 怎么测试php代码

    没有任何一名程序员可以一气呵成.完美无缺的在不用调试的情况下完成一个功能或模块.调试实际分很多种情况. 暴力调试 这种方式简单粗暴,一般PHP程序员都会用,那就是浏览器调试,在编辑器内写完代码后随后打 ...

  2. 【转】Django 模板语法

    转自:https://www.cnblogs.com/love9527/p/9077863.html Django 模板语法 一.模板 只要是在html里面有模板语法就不是html文件了,这样的文件就 ...

  3. 20180820-Java 抽象类

    Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不 ...

  4. xiugai2

    <div class="myLoading"> <div class="svg-wrap"> <svg width="8 ...

  5. Bing Beats Google for the Best Way to X-Ray Search LinkedIn

    Bing Beats Google for the Best Way to X-Ray Search LinkedIn 11/13/11 Note: I’ve provided some update ...

  6. 线段树2(P3373)

    传送 感谢洛谷题解让我理清了这一撮标记 这里多了一个乘法操作,乘法的优先级高于加法.我们来思考一下有关标记的问题. 首先由两种操作,可以想到要有两个标记,一个标记乘法(mul[k]),一个标记加法(a ...

  7. 【ABAP系列】SAP LSWM处理时,网络中断,出现错误

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP LSWM处理时,网络中断 ...

  8. 题解1433. 数码问题 (Standard IO)

    Description Alice有一个N*N的格子,把1-N^2按照从上到下从左到右的顺序填进表格中,允许在表格上进行两种操作: (1) 旋转行——这一行的数向右移动一个位置,而最后一列的数会移到第 ...

  9. linux常用命令介绍

    参考博客: https://www.cnblogs.com/caozy/p/9261224.html 学前理论 linux主要特征 :一切且文件(目录.硬盘等都是文件):硬件都在/dev 目录,如硬盘 ...

  10. [Linux] 013 其他文件搜索命令

    1. 文件搜索命令:locate 命令名称:locate 命令所在路径:/bin/locate 执行权限:所有用户 语法:locate 文件名 功能描述:在文件资料库中查找文件 范例: $ locat ...