bzoj4199 [Noi2015]品酒大会 后缀数组+并查集

Ubuntu 22.04 上 Mezzanine CMS 完整安装指南 CMS(内容管理系统)是构建博客、企业官网等静态与动态内容混合站点的核心技术栈;Django 作为 Python 生态中最成熟的 Web 框架,凭借其 ORM、Admin 和安全机制,成为 CMS 开发的首选基础。Mezzanine 是基于 Django 的轻量级 CMS,以开箱即用、零配置多语言和内置 SEO 工具为特色,特别适合中小项目快速落地。在 Ubuntu 这类强调稳定性的服务器操作系统上部署时,关键挑战并非代码逻辑,而是系统层依赖协同——如 Python 版本锁定、SQLite FTS5 支持、 阅读详情

题目大意:
定义字符串s的两个子串为r相似的当起始位置不同的两个长度为r子串完全相同。
第一问: 对于每一个r,求出r相似的子串有多少对,0<=r

#include <cstdio>
#include <algorithm>
#include <iostream>
#define N 320000
using namespace std;
typedef long long LL;
const LL INF=0x3f3f3f3f;
inline int Min(int x,int y) { return x<y?x:y; }
inline int Max(int x,int y) { return x>y?x:y; }
inline LL Max(LL x,LL y) { return x>y?x:y; }
int n,tot;
LL cnt[N],tcnt,ans[N],tmax=-INF*INF;
int f[N],mx[N],cm[N],sz[N],a[N],mi[N],ci[N];
int sa[N],rnk[N],h[N],tmp[N],sum[N],X[N],Y[N];
char s[N];
int findie(int c)
{
    if(f[c]!=c) f[c]=findie(f[c]);
    return f[c];
}
void Union(int x,int y)
{
    int t1=findie(x);
    int t2=findie(y);
    if(sz[t2]>sz[t1]) swap(t1,t2);
    tcnt+=1ll*sz[t1]*sz[t2];
    f[t2]=t1; sz[t1]+=sz[t2];

    if(mx[t2]>mx[t1]) cm[t1]=mx[t1],mx[t1]=mx[t2];
    else if(mx[t2]>cm[t1]) cm[t1]=mx[t2];
    if(cm[t2]>cm[t1]) cm[t1]=cm[t2];

    if(mi[t2]<mi[t1]) ci[t1]=mi[t1],mi[t1]=mi[t2];
    else if(mi[t2]<ci[t1]) ci[t1]=mi[t2];
    if(ci[t2]<ci[t1]) ci[t1]=ci[t2];

    tmax=Max(tmax,1ll*mx[t1]*cm[t1]);
    tmax=Max(tmax,1ll*mi[t1]*ci[t1]);
    return;
}
void get_rank()
{
    for(int i=0;i<=127;i++) sum[i]=0;
    for(int i=1;i<=tot;i++) sum[s[i]]++;
    for(int i=1;i<=127;i++) sum[i]+=sum[i-1];
    for(int i=tot;i>=1;i--) tmp[sum[s[i]]--]=i;
    for(int i=1,t=0;i<=tot;i++)
    {
        if(i==1 || s[tmp[i]]!=s[tmp[i-1]]) t++;
        rnk[tmp[i]]=t;
    }
    return;
}
void digit_sort(int key[],int order[])
{
    for(int i=0;i<=tot;i++) sum[i]=0;
    for(int i=1;i<=tot;i++) sum[key[i]]++;
    for(int i=1;i<=tot;i++) sum[i]+=sum[i-1];
    for(int i=tot;i>=1;i--) tmp[sum[key[order[i]]]--]=order[i];
    for(int i=1;i<=tot;i++) order[i]=tmp[i];
}
void get_height()
{
    int j,k;
    for(int i=1;i<=tot;i++)
    {
        if(rnk[i]==1) continue;
        k=Max(h[rnk[i-1]]-1,0);
        j=sa[rnk[i]-1];
        while(s[i+k]==s[j+k]) k++;
        h[rnk[i]]=k;
    }
}
void Suffix_Array()
{
    get_rank();
    for(int j=1;j<=tot;j<<=1)
    {
        for(int i=1;i<=tot;i++)
        {
            sa[i]=i;
            X[i]=rnk[i];
            Y[i]=i+j<=tot?rnk[i+j]:0;
        }
        digit_sort(Y,sa);
        digit_sort(X,sa);
        for(int i=1,t=0;i<=tot;i++)
        {
            if(i==1 || X[sa[i]]!=X[sa[i-1]] || Y[sa[i]]!=Y[sa[i-1]]) t++;
            rnk[sa[i]]=t;
        }
    }
    get_height();
}
bool cmp(int x,int y) { return h[x]>h[y]; }
int main()
{
    scanf("%d",&n); tot=n;
    scanf("%s",s+1);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    Suffix_Array();
    for(int i=1;i<=n;i++)
    {
        f[i]=i; sz[i]=1;
        mx[i]=a[sa[i]]; mi[i]=a[sa[i]];
        cm[i]=-INF; ci[i]=INF;
        tmp[i]=i;
    }
    sort(tmp+2,tmp+n+1,cmp);
    int now=2;
    for(int i=n-1;i>=0;i--)
    {
        while(now<=n && h[tmp[now]]==i)
        {
            Union(tmp[now],tmp[now]-1);
            now++;
        }
        cnt[i]=tcnt;
        ans[i]=tcnt?tmax:0;
    }
    for(int i=0;i<n;i++)
        printf("%lld %lld\n",cnt[i],ans[i]);
    return 0;
}
老版QQ原生表情gif动态 这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。 立即下载

相关推荐

时序约束实战:从setup/hold到时钟路径约束的深度解析

本文深度解析数字设计中的时序约束实战,重点探讨如何从setup/hold检查的核心原理出发,理解并应用时钟路径约束。文章通过剖析Path Requirement的计算逻辑,结合同频、倍频及异步时钟域等典型场景,提供了从解读时序报告到编写、调试SDC约束的系统方法,帮助工程师有效应对复杂SoC设计中的时序收敛挑战。

weixin_29291185的博客 105

在STM32F7上用FreeRTOS+LVGL实现手表页面切换:我的栈管理方案与代码详解

本文详细介绍了在STM32F7微控制器上使用FreeRTOS和LVGL实现智能手表页面切换的栈管理方案。通过栈结构的页面管理系统,结合FreeRTOS的任务调度和LVGL的轻量级特性,实现了高效、流畅的页面导航。文章还提供了代码示例和性能优化技巧,帮助开发者在资源受限环境中提升用户体验。

weixin_30718391的博客 441

解锁笔记智能对话:手把手配置 Obsidian Copilot 插件与硅基流动模型

本文详细介绍了如何为Obsidian笔记软件配置Copilot插件,并接入硅基流动AI模型,从而为个人知识库添加智能对话能力。通过手把手教程,指导用户完成插件安装、API Key获取、模型配置及索引构建,最终实现基于个人笔记内容的深度语义问答,提升知识管理效率。

corn8的博客 613

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

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

CleverLarry的博客 332

DAIC-WOZ数据集文件结构详解:CLNF特征文件、音频转录与PHQ8评分全解读

本文深入解析DAIC-WOZ数据集的文件结构,重点介绍CLNF特征文件、音频转录与PHQ8评分的详细内容。通过多模态数据处理实战指南,帮助研究者高效利用这一抑郁分析领域的重要资源,掌握面部动作单元、声学特征和文本转录的科学解读与应用技巧。

weixin_29159711的博客 183

在MacBook上直接跑Windows Server 2022:一个开发者的真实踩坑与配置全记录

本文详细记录了在MacBook上原生运行Windows Server 2022的完整流程与优化技巧。通过Boot Camp实现非虚拟机安装,开发者可以充分利用Mac硬件性能,搭建高效的本地开发环境,特别适合需要测试跨平台应用和服务器功能的场景。文章涵盖驱动处理、分区策略、Docker配置等关键步骤,为技术极客提供实用指南。

weixin_42620913的博客 247

【NOI2015】品酒大会

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

Joker & Liar的博客 295

芯片工程师-必须掌握的linux操作-第一讲

一个从材料专业,转行芯片验证初级工程师,自己也是从0基础开始学习入门,更知道0基础的人应该怎么去学习。 现在工作三个多月了,特地花时间给大家写这篇文章。希望能关注、支持下。 为什么芯片验证工程师必须要学习linux命令? 答: ① 芯片工程师主要的职责,就是与IC设计工程师和系统工程师密切合作,开发验证平台,能够根据项目要求产生测试计划,产生代码及功能覆盖率,撰写验证报告。 ②简单点说,主要工作内容,是编写代码去验证设计的对不对。 那么问题来了,编写代码,在什么环境呢,我现在告诉你,都是在linux系统中进

小白蒋-材料转行芯片验证 4842

[LOJ2133] 「NOI2015」品酒大会(后缀数组+并查集)

题意 给你一个字符串SSS,对于r∈[0,n)r\in[0,n)r∈[0,n),求有多少对位置(i,j)(i,j)(i,j)满足∀k∈[0,r]\forall k\in[0,r]∀k∈[0,r],有Si+k=Sj+kS_{i+k}=S_{j+k}Si+k​=Sj+k​,并求出这些位置中任意两位置权值最大值。 首先如果两个位置对rrr满足条件,那么它们对k∈[0,r)k\in[0,r)k∈[0,...

lunch__的博客 468

【超详细】计算机操作系统总结及思维导图(汤子瀛版)

计算机操作系统 一.操作系统引论 1.操作系统的目标和功能 目标 方便性 有效性 提高系统资源利用率 提高系统吞吐量 可扩充性 开放性 作用 OS作为用户与计算机硬件系统之间的接口 命令方式 系统调用方式 图标–窗口方式 OS实现了对计算机资源的抽象 2.操作系统的发展过程 未配置操作系统的计算机系统 人工操作方式 用户独占全机 CPU等待人工操作 严重降低...

圣三一 2万+

如何设计提示词来减少 AI 的幻觉问题?

如何设计提示词来减少 AI 的幻觉问题?

我哎GIS博客 2471

[NOI2015]品酒大会

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

Edwin VanCleef的博客 450

【大模型】Coze AI 智能体工作流从配置到使用实战详解

Coze 扣子智能体工作流从配置到使用实战详解

congge 1万+

BZOJ 4199 [Noi2015]品酒大会:后缀数组 + 并查集

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4199 题意:   给你一个长度为n的字符串s,和一个长为n的数组v。   对于每个整数r∈[0,n-1]:     (1)问你有多少对后缀(suffix(i), suffix(j)),满足LCP(suffix(i), suffix(j)) >= r     (2)...

a1392136的博客 185

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[BZOJ4199][Noi2015]品酒大会(后缀数组+并查集)

题目描述传送门题解别出心裁的一道sa,想了好久。。40ptsO(n2)O(n^2)的做法应该很好想吧 sa+st表就可以了qwq100pts首先求出height数组 考虑如果只求一个r的话怎么做 显然可以将height数组分组,每个组里都是height>=r的,然后对于每一个组计数+取max 那么如果有多个r呢?显然r大的要比r小的分的组少一些 换句话说就是如果已经将r分组,再将r-1分组

zyf2000 716

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

BZOJ_P4199 [NOI2015] 品酒大会(后缀数组+并查集)

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

BeiYu 757

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

【BZOJ4199】[Noi2015]品酒大会 题面:http://www.lydsy.com/JudgeOnline/wttl/thread.php?tid=2144 题解:听说能用SAM?SA默默水过~ 本题的实现还是非常简单的,先求出height数组,然后两杯酒'r'相似就等价于二者中间的height都>=r,于是我们将height排序,从大到小扔进去,那么所有连续的区间中的点对...

weixin_30767835的博客 73

bzoj 4199: [Noi2015]品酒大会【后缀数组+单调栈+并查集】

用SA求出height数组,然后发现每个height值都有一个贡献区间(因为点对之间要依次取min) 用单调栈处理出区间,第一问就做完了 然后用并查集维护每个点的贡献(?),从大到小枚举height,因为这样区间是不断增大的所以并查集合并即可 #include<iostream> #include<cstdio> #include<vector> #includ...

weixin_30237281的博客 103

bzoj 4199: [Noi2015]品酒大会 后缀数组+并查集

题意给出一个 长度为 n 的字符串,每一位有一个权值 val。定义两个位字符为 r 相似,是指分别从这两个字符开始,到后面的 r 个字符都相等。两个 r 相似的字符还有一个权值为这两个字符权值的乘积。问对于 r = 0, 1, 2, … , n - 1,统计出有多少种方法可以选出 2 个“r 相似”的字符,并回答选择 2 个”r 相似”的字符可以得到的权值的最大值。 n<=3*10^5,val

beginend 518

bzoj4199[luoguP2178]品酒大会[noi2015] (后缀数组+并查集)

bzoj上居然没题面。。可怕。洛谷上都有。首先,r相似其实就是lcp为r。那么就有个显然的做法。每次枚举lcp,按h分组,一组内有cnt个,则答案就是在cnt个数中选两个,C(cnt 2)。符号不会打,意思到了就好。。然后最大值。。想想怎么维护就好了。直接看代码吧。然后就可以拿到50分。 而正解是这样的:r相似是不是至少有r+1相似个?那么r+1相似有多少个是不是跟r相似没啥关系??所以我们

Icefox的博客 554

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

4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了。大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个奖项,吸引了众多品酒师参加。 在大会的晚餐上,调酒师 Rainbow 调制了 n 杯鸡尾酒。这 n 杯鸡尾酒排成一行,其中第 i 杯酒 (1≤i≤n) 被贴上了一个标签 ...

weixin_34366546的博客 112

bzoj4199 [Noi2015]品酒大会(后缀数组+ 并查集 || st表 )

bzoj4199 [Noi2015]品酒大会 原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=4199 题意: (Rinbow和Freda日常虐狗 。) 在大会的晚餐上,调酒师 Rainbow 调制了 n 杯鸡尾酒。这 n 杯鸡尾酒排成一行,其中第 i 杯酒 (1≤i≤n1≤i≤n) 被贴上了一个标签 si,每个标签都是 26 个小

Bfk的博客 477

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

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

Maxwei_wzj的OI世界 390

[NOI2015][BZOJ4199] 品酒大会|后缀数组|并查集

八中并没有题面…… 后缀数组 即lcp(i,j)=l的后缀对的数量及w[i]*w[j]的最大值。 按height从大到小处理,把相邻的合并到一起,并查集维护。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib&...

weixin_30732825的博客 80

bzoj4199: [Noi2015]品酒大会 (并查集 && 后缀数组)

据说用后缀自动机 + dp也能做 然而并不会 后缀数组的做法呢 就是先建个后缀数组,求出height值,此时如果直接找,复杂度是n ^ 2的,肯定会超时。 但是height大的值是不会对小的产生影响的,所以可以按height大小,从大到小合并两个区间,用并查集维护就可以了 代码如下 1 #include <cstdio> 2 #include <algori...

weixin_30267691的博客 89

BZOJ 4199: [Noi2015]品酒大会( 后缀数组 + 并查集 )

求出后缀数组后, 对height排序, 从大到小来处理(r相似必定是0~r-1相似), 并查集维护. 复杂度O(NlogN + Nalpha(N))-----------------------------------------------------------------------------------#include<cstdio>#include<cstring&...

weixin_30821731的博客 81
上一篇: bzoj2877 [Noi2012]魔幻棋盘 二维线段树
下一篇: bzoj4241 历史研究 回滚莫队
Todobe
博客等级 码龄10年 31粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值