考前挣扎(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. HTML计算机代码元素

    计算机代码 1 2 3 4 5 6 var person = {     firstName:"Bill",     lastName:"Gates",     ...

  2. [USACO17DEC]Barn Painting (树形$dp$)

    题目链接 Solution 比较简单的树形 \(dp\) . \(f[i][j]\) 代表 \(i\) 为根的子树 ,\(i\) 涂 \(j\) 号颜色的方案数. 转移很显然 : \[f[i][1]= ...

  3. [CSP-S模拟测试]:天才绅士少女助手克里斯蒂娜(数学+树状数组)

    题目描述 红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响. 选取显像管的任意一个平面,一开始平面内有个$n$电子,初始速度分别为$v_i$,定义飘升系数为$$\sum \li ...

  4. 第九届ECNU Coder K.计软联谊

    题目链接:http://acm.ecnu.edu.cn/contest/16/problem/K/ 题目: K. 计软联谊 Time limit per test: 7.0 seconds Time ...

  5. UNITY编辑器模式下static变量的坑

    在unity中写编辑器扩展工具,如在编辑器中加个菜单,点击这个菜单项时执行打包功能. 类如下,其中的静态变量,如果每次进来不清空,则LIST会越来越大,打包函数执行完后系统不会帮我们清空 #if UN ...

  6. git subtree模块化代码管理

    Git Subtree 的原理 首先,你有两个伟大的项目——我们叫他P1项目.P2项目,还有一个牛逼的要被多个项目共用的项目——我们叫他S项目.我们通过简要讲解使用Subtree来同步代码的过程来解释 ...

  7. hash-散列笔记

    散列基础与整数散列 散列(hash哈希)的基本思想--"将元素通过一个函数转换为整数,使该整数可以尽量唯一地代表这个元素".其中把这个转换函数称为散列函数H,元素在转换前为key, ...

  8. Win7崩溃程序目录

    很烦,占用系统空间,毫无用处 C:\Users\你的用户名\AppData\Local\CrashDumps C:\Users\你的用户名\AppData\Local\Microsoft\Window ...

  9. php不支持多线程怎么办

    PHP 默认并不支持多线程,要使用多线程需要安装 pthread 扩展,而要安装 pthread 扩展,必须使用 --enable-maintainer-zts 参数重新编译 PHP,这个参数是指定编 ...

  10. js 解决函数加载的问题

    var queue = function(funcs, scope) {         (function next() {               if(funcs.length > 0 ...