洛谷 P2178 品酒大会(bzoj P4199 [Noi2015]品酒大会/uoj P131【NOI2015】品酒大会)

涨薪技术|Kubernetes(k8s)环境部署实战 这两者都是在/etc/docker/daemon.json里修改的,所以我们一起配置了就好了,首先执行下述命令编辑daemon.json:​​​​​​​。安装完成后,可以使用以下命令来查看dashboard访问的端口号​​​​​​​。网络插件CNI也是以容器的方式进行启动​​​​​​​。安装完成后可以检查是否拉取了对应的容器​​​​​​​。再使用以下命令进行安装:​​​​​​​。打开后输入以下内容:​​​​​​​。安装1.19.0版本​​​​​​​。修改IP地址:​​​​​​​。 阅读详情

传送门

这道题一看就是一种非常恶心的感觉,事实的确如此恶心到我饭都吃不下去。。

我恐怕真的不适合这个竞赛。。

这道题我想的是sa+单调栈然后全世界都比我快,全世界都用的是并查集。。

好吧说下zz的做法:首先我们想想求lcp的过程两个后缀的lcp=rmq min height(i,j),那么我们考虑height[i]并维护一个单调递增栈,如果height[i]<=height[stack[top]],那么height[stack[top]]对后面的height[j](j>i)没有贡献那么就弹出,只要知道它待在栈内的时间新加入了多少个后缀,就能知道它会被累加多少遍。很显然打一个时间戳就能记录height[stack[top]]对多少元素累加的次数。设L[i]表示i左边有多少元素height比它大对于比他的lcm肯定等于自身的height,所以两者相乘就是对于第i个height相似度为height[i]的个数,把所有累加起来就是相似度为height[i]的个数,至于最大值呢呢就用st表维护就好了。说的简单(思考的真是无比困难。。程序也是无比难打。。菜飞了我。。

PS:介于楼主表达能力有限所以有不懂的地方可以评论哟!!

注意:1.long long 2.s[i]可能为负,对于负的情况要维护最小值,所以不一定维护最大值即最大,两个负数乘起来有可能比两个正数乘起来大,神坑。。

代码:

#include<iostream>
#include<stdio.h>
#define ll long long
using namespace std;
const int Maxn=300005;
const long long oo=2e18;
char s[Maxn];
int tax[Maxn],sa[Maxn],ranks[Maxn],height[Maxn],tp[Maxn];
int log2[Maxn],st[Maxn];
int Min[Maxn][20],Max[Maxn][20],a[Maxn],L[Maxn],times[Maxn];
long long sum[Maxn],Maxa[Maxn],Mina[Maxn],ans[Maxn];
int m=300,n,now=1,top;
inline long long max(long long x,long long y)
{
    return x>=y?x:y;
}
inline long long min(long long x,long long y)
{
    return x>=y?y:x;
}
inline void Rsort()
{
    for(int i=1;i<=m;i++)
        tax[i]=0;
    for(int i=1;i<=n;i++)
        tax[ranks[tp[i]]]++;
    for(int i=1;i<=m;i++)
        tax[i]+=tax[i-1];
    for(int i=n;i>=1;i--)
        sa[tax[ranks[tp[i]]]--]=tp[i];
}
inline int cmp(int *f,int x,int y,int w)
{
    return ((f[x]==f[y])&&(f[x+w]==f[y+w]));
}
inline void suffix()
{
    for(int i=1;i<=n;i++)
        ranks[i]=s[i],tp[i]=i;
    Rsort();
    for(int p=1,w=1,i;p<n;w+=w,m=p)
    {
        for(p=0,i=n-w+1;i<=n;i++)
            tp[++p]=i;
        for(i=1;i<=n;i++)
            if(sa[i]>w)
                tp[++p]=sa[i]-w;
        Rsort();
        swap(ranks,tp);
        ranks[sa[1]]=p=1;
        for(i=2;i<=n;i++)
            ranks[sa[i]]=cmp(tp,sa[i],sa[i-1],w)?p:++p;
    }
    for(int i=1,p,j;i<=n;height[ranks[i]]=j,i++)
        for(j=max(height[ranks[i-1]]-1,0),p=sa[ranks[i]-1];s[p+j]==s[i+j];j++);
}
inline long long rmqmin(int q1,int q2)
{
    return q1>q2?0x3f3f3f3f:min(Min[q1][log2[q2-q1+1]],Min[q2-(1<<log2[q2-q1+1])+1][log2[q2-q1+1]]);
}
inline long long rmqmax(int q1,int q2)
{
    return q1>q2?-0x3f3f3f3f:max(Max[q1][log2[q2-q1+1]],Max[q2-(1<<log2[q2-q1+1])+1][log2[q2-q1+1]]);
}
int main()
{
    scanf("%d",&n);
    scanf("%s",s+1);
    suffix();
    for(int i=0;i<=n;i++)
    {
        ans[i]=-oo;
        Maxa[i]=-oo;
        Mina[i]=oo;
    }
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    log2[0]=-1;
    for(int i=1;i<=n;i++)
        log2[i]=log2[i>>1]+1;
    for(int i=1;i<=n;i++)
    {
        Min[i][0]=a[sa[i]];
        Max[i][0]=a[sa[i]];
    }
    for(int j=1;j<=log2[n];j++)
        for(int i=1;i+(1<<j)-1<=n;i++)
        {
            Min[i][j]=min(Min[i][j-1],Min[i+(1<<j-1)][j-1]);
            Max[i][j]=max(Max[i][j-1],Max[i+(1<<j-1)][j-1]);
        }
    for(int i=2;i<=n;i++)
    {
        L[i]=i-1;
        Mina[i]=min(Mina[i],a[sa[i-1]]);
        Maxa[i]=max(Maxa[i],a[sa[i-1]]);
        while(top!=0&&height[st[top]]>=height[i])
        {
            int len=st[top]-L[st[top]],time_now=now-times[st[top]];
            L[i]=L[st[top]];
            sum[height[st[top]]]+=(long long)len*time_now;
            long long Ma=rmqmax(times[st[top]]+1,now),Mi=rmqmin(times[st[top]]+1,now);
            ans[height[st[top]]]=max(ans[height[st[top]]],Ma*Maxa[st[top]]);
            ans[height[st[top]]]=max(ans[height[st[top]]],Mi*Mina[st[top]]);
            Mina[i]=min(Mina[st[top]],Mina[i]);
               Maxa[i]=max(Mina[st[top]],Maxa[i]);
            Mina[i]=min(Maxa[st[top]],Mina[i]);
            Maxa[i]=max(Maxa[st[top]],Maxa[i]);
            top--;
        }
        st[++top]=i;
        times[i]=now;
        now++;
    }
    while(top!=0)
    {
        int len=st[top]-L[st[top]],time_now=now-times[st[top]];
        sum[height[st[top]]]+=(long long)len*time_now;
        long long Ma=rmqmax(times[st[top]]+1,now),Mi=rmqmin(times[st[top]]+1,now);
        ans[height[st[top]]]=max(ans[height[st[top]]],Ma*Maxa[st[top]]);
        ans[height[st[top]]]=max(ans[height[st[top]]],Mi*Mina[st[top]]);
        top--;
    }
    for(int i=n-1;i>=0;i--)
    {
        ans[i]=max(ans[i+1],ans[i]);
        sum[i]+=sum[i+1];
    }
    for(int i=0;i<n;i++)
        if(ans[i]==-oo)
        {
            ans[i]=0;
        }
    for(int i=0;i<n;i++)
        printf("%lld %lld\n",sum[i],ans[i]);
    return 0;
}


新手避坑指南:用Silvaco Atlas搞定GaN HEMT电热仿真的完整流程(附代码解读) 本文详细介绍了使用Silvaco Atlas进行GaN HEMT电热特性仿真的完整流程,特别针对新手常见问题提供避坑指南。从软件环境配置、结构定义、网格划分到物理模型设置,逐步解析关键步骤,并附有代码解读和调试技巧,帮助读者快速掌握GaN器件仿真的核心技术。 阅读详情

相关推荐

UE5.2 DynamicMesh避坑指南:从蓝图生成到物理碰撞的完整流程

本文详细解析了在UE5.2中使用DynamicMesh组件时,如何正确选择ADynamicMeshActor与AGeneratedDynamicMeshActor,并提供了从蓝图生成、初始化到配置物理碰撞的完整避坑流程。重点解决了SpawnActor失效、碰撞更新等常见问题,帮助开发者高效实现程序化网格生成与动态变形效果。

rrr55的博客 314

【NOI2015】品酒大会

分析:首先可以想到 r 相似的两个子串肯定是满足 1...r-1 相似的,我们先求一遍后缀数组,根据 sa 数组的性质,0相似 即sa[1..n]整个区间,1 相似即将 1..n 划分成若干个区间,每个区间内的最长公共子串为 1,依次类推下去,则 一个 i-1 相似 的区间是由两个或多个 i 相似的区间合并的,类似并查集的合并过程。由此,我们可以以ht 数组的值从大到小遍历,维护...

Joker & Liar的博客 295

STM32与SD卡SPI接口硬件设计:从原理图到调试的完整指南

SPI(串行外设接口)作为一种广泛应用的同步串行通信协议,以其接线简单、驱动成熟的特点,成为连接微控制器与各类外设的经典方案。其工作原理基于主从架构,通过时钟、数据线和片选信号实现全双工通信,在嵌入式系统中具有极高的技术价值,常用于连接传感器、存储设备和显示模块等。在数据存储场景中,SD卡凭借其大容量和便携性成为首选,而通过SPI模式驱动SD卡,则平衡了性能与设计复杂度。本文聚焦于使用Altium Designer进行硬件设计的工程实践,详细解析了STM32微控制器与SD卡通过SPI通信时,电源管理、上拉电

weixin_34101784的博客 555

NOI 2015 品酒大会

#131. 【NOI2015】品酒大会 一年一度的“幻影阁夏日品酒大会”隆重开幕了。大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个奖项,吸引了众多品酒师参加。 在大会的晚餐上,调酒师 Rainbow 调制了 n 杯鸡尾酒。这 n 杯鸡尾酒排成一行,其中第 n 杯酒 (1 ≤ i ≤ n) 被贴上了一个标签si,每个标签都是 26 个小写 英文字母...

weixin_30900589的博客 180

SQL Prompt 9.0插件突然无法使用解决办法(附防联网激活)多图+文字

可能由于Redgate公司最近抓盗版抓得严,导致激活后的SQL Prompt联网后突然无法使用,无论卸载重装都没办法继续使用,本人同时使用SQL Assistant和SQL Prompt,我喜欢SQL Assistant代码提示功能,而SQL Prompt我喜欢将查询结果复制后可以直接生产插入脚本,这是最爽的一件事,即便对表有多么熟悉,没有这些插件,几行语法都要敲大半天,目前本人已经离不开这两个插...

骚团长的博客 1万+

EEVDF调度算法核心实现解析(一)

本文深入解析Linux kernel 6.6引入的EEVDF调度算法核心实现,详细讲解其基于虚拟截止时间(virtual deadline)的进程挑选机制和红黑树优化设计。通过代码实例展示算法如何平衡系统响应速度与公平性,特别适合需要优化Linux系统性能的开发者参考。

weixin_42522953的博客 478

[Luogu P2178] [BZOJ 4199] [NOI2015]品酒大会

洛谷传送门 BZOJ传送门 题目描述 一年一度的“幻影阁夏日品酒大会”隆重开幕了。大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个奖项,吸引了众多品酒师参加。 在大会的晚餐上,调酒师 Rainbow 调制了 nnn 杯鸡尾酒。这 nnn 杯鸡尾酒排成一行,其中第 nnn 杯酒 (1≤i≤n)(1 ≤ i ≤ n)(1≤i≤n) 被贴上了一个标签sis_isi​,每...

LPA的博客 368

SAP FICO实操:如何修改已发生业务数据的成本中心公司代码(附RKACOR06程序运行指南)

本文详细解析了SAP FICO系统中使用RKACOR06程序修改已发生业务数据的成本中心和公司代码的实操方法。通过实战案例分享,提供从前期准备到后期验证的全流程指南,帮助企业应对组织架构重组或财务核算体系调整时的数据迁移挑战,特别适用于跨公司代码的成本中心划转场景。

weixin_27303545的博客 190

bzoj4199&uoj131: [Noi2015]品酒大会

传送门:http://uoj.ac/problem/131 思路:先求出height,然后根据排名重新给后缀标号,按height从大到小做,每次合并i和i-1,用并查集维护,更新答案。 #include #include #include #define max(a,b) (a>b?a:b) #define min(a,b) (a<b?a:b) const int maxn=300010; u

thy的专栏 1871

LVGL(lv_canvas)

这篇文章介绍了LVGL图形库中的lv_canvas组件,主要内容包括: lv_canvas是一个绘图缓冲区对象,提供丰富的绘图API,可以理解为LVGL的"离屏画布"。 基本使用流程:创建缓冲区->创建canvas对象->设置缓存和尺寸->进行绘图操作。 详细列举了常用的绘图函数,如绘制线条、矩形、文字、图片等。 提供了示例代码展示如何创建画布并绘制一条红色线段。 介绍了canvas的典型应用场景,如动态波形绘制、自定义控件底图等。 对比了canvas与普通img的区别

m0_49476241的博客 1029

把财务与管理会计装进一张表:读懂 S/4HANA 的 ACDOCA

别慌,这反而是设计所需。只是大量历史上为汇总、加速而建的索引与汇总表被淘汰或改造,很多被兼容视图 compatibility views 替代,通过视图去 ACDOCA 或 ACDOCT 取数,从而保证老代码还能 SELECT 到数据,但失去写权限。它把原来分散在多张表里的信息整合到一起,例如总账、固定资产、物料账、盈利能力分析 CO-PA、成本控制等维度,发布过的资料多次强调这一点。其二,查询必须带上高选择性的条件,尤其是 RLDNR、RBUKRS、GJAHR 这三个维度,能大幅降低列存扫描的代价。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 949

[NOI2015]品酒大会

传送门 先对这个字符串求一下SA 考虑SA数组中第i位,暴力计算贡献就是向后枚举,然后计算枚举到的位与第i位之间height的最小值,然后对r==min(height)的贡献就是这一对数并且可以用他们的权值之积可以更新最大值 考虑height较大的是不会对height较小的有贡献,就可以从height大的到height小的依次计算 可以保证height较大的形成的集合通过当前height连在

Ostmbh的博客 487

【GeoDa实用技巧100例】024:geoda计算全局(局部)莫兰指数Moran‘s I,LISA聚类地图,显著性地图

【GeoDa实用技巧100例】024:geoda计算全局(局部)莫兰指数Moran's I,单变量莫兰指数,双变量莫兰指数计算,LISA聚类地图,显著性地图,Geoda双变量莫兰指数是一种强大的地理空间数据分析工具。

智慧空间实验室 6052

[洛谷P2178][BZOJ4199][UOJ#131][NOI2015]品酒大会(绝世好题)三种做法

Address 洛谷:https://www.luogu.org/problemnew/show/P2178 BZOJ:https://www.lydsy.com/JudgeOnline/problem.php?id=4199 UOJ:http://uoj.ac/submissions?submitter=xyz32768 Meaning 输入 nnn 和一个长度为 nnn 的字符串,再...

女装的你,如此好看! 413

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[Noi 2015] 品酒大会

后缀数组+rmq

zhshrzhshr的博客 656

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

bzoj4199 [Noi2015]品酒大会

【题目描述】 一年一度的“幻影阁夏日品酒大会”隆重开幕了。大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个奖项,吸引了众多品酒师参加。

wumingshi 515

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

4199: [Noi2015]品酒大会

bzoj上没有题面。。(百度有hhh) 这看上去就很后缀数组啊。。 先处理出后缀数组(都快忘了咋整了)。。 也就是处理出sa,rank,height三个数组 由后缀数组的性质,两个后缀的LCP是路径上height值取min 第i个位置的height值,能用作LCP的区间[L,R],满足区间最小height为height[i] 那么在[L,i)中选一位置为左端点,在[i,R]中选一位置作

CRZbulabula的博客 605

【BZOJ4199】品酒大会(NOI2015)-后缀数组+并查集

测试地址:品酒大会 做法:本题需要用到后缀数组+并查集。 不难想到,对题目所给的字符串构造后缀数组,那么后缀数组上两个后缀之间最小的heightheightheight就是这两杯酒满足的最大相似度。我们要求的,实际上是对于每个相似值kkk,对于后缀数组上heightheightheight大于等于kkk的边连接成的每个连续区间求出方案数和最大乘积,然后对方案数累加,对最大乘积取最大值。不难看出...

Maxwei_wzj的OI世界 390

[bzoj4199][NOI2015]品酒大会

4199: [Noi2015]品酒大会Time Limit: 10 Sec Memory Limit: 512 MB Submit: 418 Solved: 231 [Submit][Status][Discuss] Description一年一度的“幻影阁夏日品酒大会”隆重开幕了。大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个奖项,吸引了众多品酒师参加。

Vampire 1450

洛谷P2178 [NOI2015]品酒大会——题解

题目传送门 题目大意: 有一个长为n的字符串,每一个字符有一个权值,称相同的两个长度为r的子串的开头是“1相似”、“2相似”、⋯⋯\cdots、“(r-1)相似”、“r相似”的,试问有多少k相似的字符(1&lt;=k&lt;=n)以及k相似的两个字符的权值积最大为多少。 思考过程: 我是在洛谷的后缀数组分类里找到这道题的,那么就先码一遍后缀数组的模板2333。 看过题目之后,我们发现...

CleverLarry的博客 332

[NOI2015]品酒大会 后缀数组+并差集

Descripition 给出一个长度为n的字符串,每个字符有一个权值。 定义两个子串满足r相似,当且仅当两个串长度为r,且字符都相等,那么这两个串的配对权值为开头权值相乘。 先让你求满足0~n-1相似的 子串有多少对。 最大的配对权值。 Sample Input 10 ponoiiipoi 2 1 4 7 4 8 3 6 4 7 Sample Output 45 5...

xgc_woker的博客 257

【NOI 2015】品酒大会

【NOI 2015】品酒大会 Problem Description 一年一度的“幻影阁夏日品酒大会”隆重开幕了。大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个奖项,吸引了众多品酒师参加。 在大会的晚餐上,调酒师 Rainbow 调制了 \(n\) 杯鸡尾酒。这 \(n\) 杯鸡尾酒排成一行,其中第 \(i\) 杯...

洛水·锦依卫's Blog 251

【BZOJ4199】品酒大会,后缀数组+并查集维护

烦死了

xiaoyimi的博客 817

【BZOJ4199】品酒大会(后缀自动机)

题面BZOJ题解发现了一个很有趣的东西 后缀排序之后对heightheight排序,用并查集维护 和在后缀树上dpdp是一样的 所以这题用后缀树来dpdp 将串反着插入SAMSAM 构建后缀树 对于每个点维护最大值,最小值,和子树大小 每次只会更新u.longestu.longest位置的值 然后前缀和一下就是答案#include<iostream> #include<cstdio>

小蒟蒻yyb的博客 370
上一篇: 洛谷 P3773 [CTSC2017]吉夫特(bzoj P4903 [CTSC2017]吉夫特/uoj P300【CTSC2017】吉夫特)
下一篇: bzoj P4033 [HAOI2015]树上染色
Leo_Riddle
博客等级 码龄11年 4粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值