考前挣扎(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. 51nod 1514 美妙的序列 分治NTT + 容斥

    Code: #include<bits/stdc++.h> #define ll long long #define mod 998244353 #define maxn 400000 # ...

  2. [CF959D]Mahmoud and Ehab and another array construction task题解

    解法 非常暴力的模拟. 一开始吧\(1 -> 2 \times 10^6\)全部扔进一个set里,如果之前取得数都是与原数组相同的,那么lower_bound一下找到set中大于等于它的数,否则 ...

  3. Mybatis系列之逆向工程

    前言 正式开始前需先导入mybatis-generator-core的jar包,并且准备好数据库,表,以及Mybatis Generator官网(http://www.mybatis.org/gene ...

  4. Java Web学习笔记之---JSP

    Java Web学习笔记之---JSP (一)JSP常用语法 (1)HTML注释 <!--所要注释的内容 --> 在客户端显示一个注释. (2)隐藏注释 <%--所要注释的内容--% ...

  5. The Cats' Feeding Spots

    The Cats' Feeding Spots 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In Yan Yuan, the Peking University cam ...

  6. oracle SQL in plsql

    刚安装好的oracle和plsql,以oracle11g为例 1.刚安装好后有两个默认的系统账号和初始密码:sys/change_on_install,system/manager 2.如果忘记了或不 ...

  7. Spring Boot 读取外部的配置文件

    Spring Boot 程序会按优先级从下面这些路径来加载application.properties 或者 application.yml 配置文件 jar包同级目录下的/config目录jar包同 ...

  8. curl 中关于 CURLINFO_HEADER_SIZE 的 BUG 定位及修复

    curl 官方下载页面 CentOS7 默认安装的 curl 版本太低了,需要升级为最新版. 1. 问题描述 对接了一个接口,用来下载 PDF 文件.使用 curl 下载后,文件老是报错无法打开.接口 ...

  9. php Function ereg() is deprecated的解决方法

    PHP 5.3 ereg() 无法正常使用,提示“Function ereg() is deprecated Error”.问题根源是php中有两种正则表示方法,一个是posix,一个是perl,ph ...

  10. 同余dp

    先验知识: 余数的计算公式:c = a -⌊ a/b⌋ * b 其中,⌊ ⌋为向下取整运算符,向下取整运算称为Floor,用数学符号⌊ ⌋表示 题目: Consider an arbitrary se ...