UOJ131 [NOI2015] 品酒大会
考前挣扎(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] 品酒大会的更多相关文章
- BZOJ4199/UOJ131 [Noi2015]品酒大会
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- BZOJ 4199: [Noi2015]品酒大会 [后缀数组 带权并查集]
4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 ...
- [UOJ#131][BZOJ4199][NOI2015]品酒大会 后缀数组 + 并查集
[UOJ#131][BZOJ4199][NOI2015]品酒大会 试题描述 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个 ...
- 洛谷 P2178 [NOI2015]品酒大会 解题报告
P2178 [NOI2015]品酒大会 题目描述 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发"首席品酒家"和 ...
- 【BZOJ4199】[Noi2015]品酒大会 后缀数组+并查集
[BZOJ4199][Noi2015]品酒大会 题面:http://www.lydsy.com/JudgeOnline/wttl/thread.php?tid=2144 题解:听说能用SAM?SA默默 ...
- [UOJ#131][BZOJ4199][NOI2015]品酒大会
[UOJ#131][BZOJ4199][NOI2015]品酒大会 试题描述 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个 ...
- BZOJ_4199_[Noi2015]品酒大会_后缀自动机
BZOJ_4199_[Noi2015]品酒大会_后缀自动机 Description 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 酒家”和“首席 ...
- [NOI2015]品酒大会(SA数组)
[NOI2015]品酒大会 题目描述 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发"首席品酒家"和" ...
- 洛谷P2178 [NOI2015]品酒大会 后缀数组+单调栈
P2178 [NOI2015]品酒大会 题目链接 https://www.luogu.org/problemnew/show/P2178 题目描述 一年一度的"幻影阁夏日品酒大会" ...
随机推荐
- 51nod 1514 美妙的序列 分治NTT + 容斥
Code: #include<bits/stdc++.h> #define ll long long #define mod 998244353 #define maxn 400000 # ...
- [CF959D]Mahmoud and Ehab and another array construction task题解
解法 非常暴力的模拟. 一开始吧\(1 -> 2 \times 10^6\)全部扔进一个set里,如果之前取得数都是与原数组相同的,那么lower_bound一下找到set中大于等于它的数,否则 ...
- Mybatis系列之逆向工程
前言 正式开始前需先导入mybatis-generator-core的jar包,并且准备好数据库,表,以及Mybatis Generator官网(http://www.mybatis.org/gene ...
- Java Web学习笔记之---JSP
Java Web学习笔记之---JSP (一)JSP常用语法 (1)HTML注释 <!--所要注释的内容 --> 在客户端显示一个注释. (2)隐藏注释 <%--所要注释的内容--% ...
- The Cats' Feeding Spots
The Cats' Feeding Spots 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In Yan Yuan, the Peking University cam ...
- oracle SQL in plsql
刚安装好的oracle和plsql,以oracle11g为例 1.刚安装好后有两个默认的系统账号和初始密码:sys/change_on_install,system/manager 2.如果忘记了或不 ...
- Spring Boot 读取外部的配置文件
Spring Boot 程序会按优先级从下面这些路径来加载application.properties 或者 application.yml 配置文件 jar包同级目录下的/config目录jar包同 ...
- curl 中关于 CURLINFO_HEADER_SIZE 的 BUG 定位及修复
curl 官方下载页面 CentOS7 默认安装的 curl 版本太低了,需要升级为最新版. 1. 问题描述 对接了一个接口,用来下载 PDF 文件.使用 curl 下载后,文件老是报错无法打开.接口 ...
- php Function ereg() is deprecated的解决方法
PHP 5.3 ereg() 无法正常使用,提示“Function ereg() is deprecated Error”.问题根源是php中有两种正则表示方法,一个是posix,一个是perl,ph ...
- 同余dp
先验知识: 余数的计算公式:c = a -⌊ a/b⌋ * b 其中,⌊ ⌋为向下取整运算符,向下取整运算称为Floor,用数学符号⌊ ⌋表示 题目: Consider an arbitrary se ...