用常用的套路,排序之后从大到小插入height,用并查集维护即可。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=;
const ll inf=1e18;
int n,sa[maxn],H[maxn],ra[maxn],tong[maxn],m,tp[maxn],fa[maxn];
ll ans1[maxn],ans2[maxn],c[maxn];
char s[maxn];
int getfa(int x){return (x==fa[x])?x:fa[x]=getfa(fa[x]);}
void rsort(){
for(int i=;i<=m;++i)tong[i]=;
for(int i=;i<=n;++i)tong[ra[tp[i]]]++;
for(int i=;i<=m;++i)tong[i]+=tong[i-];
for(int i=n;i>=;--i)sa[tong[ra[tp[i]]]--]=tp[i];
}
int cmp(int x,int y,int w){return tp[x]==tp[y]&&tp[x+w]==tp[y+w];}
void pre(){
for(int i=;i<=n;++i)ra[i]=s[i]-'a'+,tp[i]=i; m=;rsort(); for(int w=,p=,i;p<n;w+=w,m=p){
for(p=,i=n-w+;i<=n;++i)tp[++p]=i;
for(i=;i<=n;++i)if(sa[i]>w)tp[++p]=sa[i]-w;
rsort();swap(tp,ra);ra[sa[]]=p=;
for(i=;i<=n;++i)ra[sa[i]]=cmp(sa[i],sa[i-],w)?p:++p;
}
int j,k=;
for(int i=;i<=n;H[ra[i++]]=k)
for(k=k?k-:k,j=sa[ra[i]-];s[i+k]==s[j+k];++k);
}
struct node{
int id,v;
bool operator<(const node&t)const{
return v<t.v;
}
}tmp[maxn];
struct lian{
int l,r;
ll ma,mi,len;
}a[maxn];
void merge(int x,int y,int w){
x=getfa(x);y=getfa(y);
ll t1=max(a[x].ma*a[y].ma,a[x].mi*a[y].mi);
ll t2=max(a[x].ma*a[y].mi,a[x].mi*a[y].ma);
ll t3=min(a[x].ma*a[y].ma,a[x].mi*a[y].mi);
ll t4=min(a[x].ma*a[y].mi,a[x].mi*a[y].ma);
a[x].ma=max(a[x].ma,a[y].ma);
a[x].mi=min(a[y].mi,a[x].mi);
ans1[w]+=a[x].len*a[y].len;
a[x].len+=a[y].len;
fa[y]=x;
ans2[w]=max(ans2[w],max(t1,t2)); }
int main(){
cin>>n;
scanf("%s",s+);
pre();
for(int i=;i<=n;++i){
tmp[i-].id=i,tmp[i-].v=H[i];
}
sort(tmp+,tmp+n);
for(int i=;i<=n;++i)scanf("%lld",&c[i]);
for(int i=;i<=n;++i){
a[i].mi=a[i].ma=c[sa[i]];
a[i].l=a[i].r=i;a[i].len=;
fa[i]=i;
}
//for(int i=1;i<=n;++i)cout<<sa[i]<<' '<<H[i]<<endl;
for(int i=;i<=n;++i)ans2[i]=-inf;
for(int i=n-;i>=;--i){
merge(tmp[i].id-,tmp[i].id,tmp[i].v);
}
for(int i=n-;i>=;--i){
ans1[i]+=ans1[i+];
ans2[i]=max(ans2[i],ans2[i+]);
}
for(int i=;i<=n-;++i){
printf("%lld ",ans1[i]);
if(ans2[i]==-inf)printf("%lld\n",);
else printf("%lld\n",ans2[i]);
}
return ;
}

noi2015品酒大会(sa)的更多相关文章

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

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

  2. Luogu2178 NOI2015 品酒大会 SA、并查集

    传送门 感觉题目讲的很不清楚-- 题目意思就是给出一个长度为\(n\)的字符串,求对于\(r=0,1,...,n-1\),求出\(LCP(suffix_p,suffix_q) \geq r\)的无序数 ...

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

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

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

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

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

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

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

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

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

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

  8. [NOI2015] 品酒大会 - 后缀数组,并查集,STL,启发式合并

    [NOI2015] 品酒大会 Description 对于每一个 \(i \in [0,n)\) 求有多少对后缀满足 LCP 长度 \(\le i\) ,并求满足条件的两个后缀权值乘积的最大值. So ...

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

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

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

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

随机推荐

  1. QQ第三方登录(预备节)

    第一次很多时候,用户因为复杂的注册程序,而不愿意再体验我们的网站服务,我们可以通过QQ第三方授权,这样既保证了用户数,而且也极大的提高了用户体验.废话就不多说了,直接进入正题... 要实现QQ第三方登 ...

  2. REST framwork之解析器

    一 我们首先要知道解析器是什么以及他的功能: REST framework 包含许多内置的解析器类,允许接受各种媒体类型(media types)的请求.还支持自定义解析器,这使你可以灵活地设计 AP ...

  3. Dubbo-admin管理平台的安装

      1.到地址 https://github.com/alibaba/dubbo 下载dubbo源码  2.解压缩zip文件到 “ D:\技术资料\zookeeper\dubbo-master\dub ...

  4. python大法好——递归、内置函数、函数进阶

    1.递归(自己干自己) def fun(n): n=n/2 print(n) if(n>2) fun(n) #函数调用 fun(10) 结果是5 2 1 0 递归的执行过程:递归执行到最里面一层 ...

  5. 目标检测框架py-faster-rcnn修改anchor_box

    众所周知,anchor_box控制了回归框的大小,我们有时候检测的是大物体或小物体时,需要调整回归框的大小的时候,得改一下anchor_box.基于rgb公开的py-faster-rcnn修改anch ...

  6. cxGrid类似pagecontrol的效果

    1.对TcxGrid创建多个Level 2.对TcxGrid的TcxGridLevelOptions的TabsForEmptyDetail设置为True 3.再设置DetailTabsPosition ...

  7. Android Studio2.0 教程从入门到精通Windows版 - 提高篇

    第二篇我们开发了一个Hello World应用,并介绍Android Sutdio的界面和如何调试应用,接下来将介绍一些常用的快捷键和必备插件. 常用快捷键 代码跳转 描述:跳转是为了方便代码位置的定 ...

  8. 2019/1/9 6系列所有装置编号与SIM卡信息抓取

    一.报错:File "G:/station/6系列装置信息明细.py", line 12, in <module>workbook.save(r'.\6系列装置明细表. ...

  9. 云笔记项目-Spring事务学习_测试准备

    在做云笔记项目的过程中,顺便简单的学习了Spring的事务概念,业务以如果添加笔记,则增加用户星星数目作为例子,引入了事务的概念.类似注册送积分之类的,云笔记项目以增加笔记就送星星来说明事务.具体在添 ...

  10. 在ASP.NET MVC中使用UEditor无法提交的解决办法

    很简单的一个ajax提交,却怎么都不成功 $.ajax({ type: "POST", url: "/mms/riskmanage/commitreply", ...