洛谷U525322 优美区间

优美区间

题目描述

有一个长度为 n n n 的数字序列,序列的第 i i i 个数为 a i a_i ai

定义区间 [ l , r ] [l,r] [l,r] 的优美程度为 gcd ⁡ ( a l , a l + 1 , … , a r ) × ∑ i = l r a i \gcd(a_l,a_{l+1},\dots,a_r)\times\sum\limits_{i=l}^ra_i gcd(al,al+1,,ar)×i=lrai

你需要求出长度至少为 k k k 的区间的优美程度的最大值。

输入格式

第一行两个正整数 n , k n,k n,k

第二行 n n n 个正整数,第 i i i 个正整数为 a i a_i ai

输出格式

一行一个整数,表示答案。

样例 #1

样例输入 #1

7 2
2 1 5 4 4 4 2

样例输出 #1

48

提示

1 ≤ k ≤ n ≤ 1 0 6 1\le k\le n\le10^6 1kn106 1 ≤ a i ≤ 1 0 6 1\le a_i\le10^6 1ai106

注意到:对于一个 r r r,不同的 gcd ⁡ ( a l , a l + 1 , … , a r ) \gcd(a_l,a_{l+1},\dots,a_r) gcd(al,al+1,,ar) 至多只有 ⌊ log ⁡ a r ⌋ + 1 \lfloor\log a_r\rfloor+1 logar+1 种。

当我们对于一个 r = x r=x r=x 求出了所有不同的 gcd ⁡ ( a l , a l + 1 , … , a r ) \gcd(a_l,a_{l+1},\dots,a_r) gcd(al,al+1,,ar) 并找到了与之对应的最小的 l l l 后,要求出 r = x + 1 r=x+1 r=x+1 的情况。只需要在 l l l 的集合中插入 x + 1 x+1 x+1,并将对应的 gcd ⁡ \gcd gcd 相同的 l l l 只保留最小的即可。

于是对于每个 r r r,我们都可以求出所有不同的 gcd ⁡ ( a l , a l + 1 , … , a r ) \gcd(a_l,a_{l+1},\dots,a_r) gcd(al,al+1,,ar) 和与之对应的最小的 l l l,依次对这些区间中长度至少为 k k k 的区间计算优美程度,并取最大值即可。

时间复杂度为 Θ ( n log ⁡ 2 a ) \Theta(n\log^2 a) Θ(nlog2a),常数较小,可以通过本题。精细实现或使用科技可以做到 Θ ( n log ⁡ a ) \Theta(n\log a) Θ(nloga) 的复杂度。

暴力思路

常规暴力思路很容易想,但是拿不到满分。即遍历每一个可能的区间,同时计算gcd。
但是这样时间复杂度是 O ( n 2 log ⁡ a ) O(n^2 \log a) O(n2loga)级的。

#include <bits/stdc++.h>
#define endl '\n'
#define int long long
typedef long long ll;
using namespace std;
int a[1000005],p[1000005];
// int g[1000005];
signed main() {cin.tie(0)->ios::sync_with_stdio(0);int n,k;cin>>n>>k;for(int i=1;i<=n;i++){cin>>a[i];p[i]=a[i]+p[i-1];}   int ans = 0;for (int i = 1; i <= n - k + 1; i++) {int g = a[i];for (int j = i; j <= n; j++) {g = __gcd(g, a[j]);if (j - i + 1 >= k) {int sum = p[j] - p[i - 1];int tans = g * sum;ans = max(ans, tans);}}}cout << ans << endl;return 0;
}
AC代码:
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
typedef long long ll;
using namespace std;
int a[1000005],p[1000005];
int g[1000005];  //存储左端点gcd
int pos[1000005]; //存储左端点位置
signed main() {cin.tie(0)->ios::sync_with_stdio(0);int n,k;cin>>n>>k;for(int i=1;i<=n;i++){cin>>a[i];  p[i]=a[i]+p[i-1]; // 前缀和}   int ans = 0;int cnt = 0;for (int i = 1; i <= n; i++) { // 枚举右端点ipos[++cnt]=i;  // 将右端点本身添加进左端点的集合中g[cnt]=a[i];int tcnt = cnt;cnt = 0;for (int j = 1; j <= tcnt; j++) {//枚举左端点jg[j]=__gcd(g[j],a[i]); // 每个左端点与a[i]gcdif(g[j]!=g[cnt]){  // 重新计数 保存每个gcd最小左端点信息pos[++cnt]=pos[j];g[cnt]=g[j];if ( i - pos[j] + 1 >= k) { // 长度满足条件就更新答案int sum = p[i] - p[pos[j]-1];int tans = g[j] * sum;ans = max(ans, tans);}}}}cout << ans << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/69471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何把obsidian的md文档导出成图片,并加上文档属性

上篇关于这个插件PKMer_Obsidian 插件&#xff1a;Export Image plugin 一键将笔记转换为图片分享的文章 如何把obsidian的md文档导出成图片&#xff0c;并加上水印-CSDN博客 如何导出图片的时候让文档属性也显示出来&#xff0c;啊啊&#xff0c;这个功能找了一晚上&#xf…

新年祝词(原创)

新年将至&#xff0c;福进万户。 家家团圆&#xff0c;事事顺心。 喜迎财神&#xff0c;多寿添金。 瑞兽迎春&#xff0c;炮竹声起。 趋吉避凶&#xff0c;蛇年大吉。 中华崛起&#xff0c;人人自强。 天下大同&#xff0c;百姓富足。 有情有义&#xff0c;平易近人。 …

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.19 排序革命:argsort的十大高阶用法

1.19 排序革命&#xff1a;argsort的十大高阶用法 目录 #mermaid-svg-Qu8PcmLkIc1pOQJ7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Qu8PcmLkIc1pOQJ7 .error-icon{fill:#552222;}#mermaid-svg-Qu8PcmLkIc1pOQJ…

TensorFlow实现逻辑回归模型

逻辑回归是一种经典的分类算法&#xff0c;广泛应用于二分类问题。本文将介绍如何使用TensorFlow框架实现逻辑回归模型&#xff0c;并通过动态绘制决策边界和损失曲线来直观地观察模型的训练过程。 数据准备 首先&#xff0c;我们准备两类数据点&#xff0c;分别表示两个不同…

Unity git版本管理

创建仓库的时候添加了Unity的.gitignore模版&#xff0c;在这个时候就能自动过滤不需要的文件 打开git bash之后&#xff0c;步骤git版本管理-CSDN博客 如果报错&#xff0c;尝试重新进git 第一次传会耗时较长&#xff0c;之后的更新就很快了

【AI论文】扩散对抗后训练用于一步视频生成总结

摘要&#xff1a;扩散模型被广泛应用于图像和视频生成&#xff0c;但其迭代生成过程缓慢且资源消耗大。尽管现有的蒸馏方法已显示出在图像领域实现一步生成的潜力&#xff0c;但它们仍存在显著的质量退化问题。在本研究中&#xff0c;我们提出了一种在扩散预训练后针对真实数据…

低代码系统-产品架构案例介绍、明道云(十一)

明道云HAP-超级应用平台(Hyper Application Platform)&#xff0c;其实就是企业级应用平台&#xff0c;跟微搭类似。 通过自设计底层架构&#xff0c;兼容各种平台&#xff0c;使用低代码做到应用搭建、应用运维。 企业级应用平台最大的特点就是隐藏在冰山下的功能很深&#xf…

实时数据处理与模型推理:利用 Spring AI 实现对数据的推理与分析

在现代企业中&#xff0c;实时数据处理与快速决策已经成为关键需求。通过集成 Spring AI&#xff0c;我们不仅可以高效地获取实时数据&#xff0c;还可以将这些数据输入到 AI 模型中进行推理与分析&#xff0c;以便生成实时的业务洞察。 本文将讲解如何通过 Spring AI 实现实时…

制造企业的成本核算

一、生产成本与制造费用的区别 (1)生产成本,是直接用于产品生产,构成产品实体的材料成本。 包括企业在生产经营过程中实际消耗的原材料、辅助材料、备品备件、外购半成品、燃料、动力包装物以及其它直接材料,和直接参加产品生产的工人工资,以及按生产工人的工资总额和规…

2025年AI手机集中上市,三星Galaxy S25系列上市

2025年被认为是AI手机集中爆发的一年&#xff0c;各大厂商都会推出搭载人工智能的智能手机。三星Galaxy S25系列全球上市了。 三星Galaxy S25系列包含S25、S25和S25 Ultra三款机型&#xff0c;起售价为800美元&#xff08;约合人民币5800元&#xff09;。全系搭载骁龙8 Elite芯…

【ESP32】ESP-IDF开发 | WiFi开发 | TCP传输控制协议 + TCP服务器和客户端例程

1. 简介 TCP&#xff08;Transmission Control Protocol&#xff09;&#xff0c;全称传输控制协议。它的特点有以下几点&#xff1a;面向连接&#xff0c;每一个TCP连接只能是点对点的&#xff08;一对一&#xff09;&#xff1b;提供可靠交付服务&#xff1b;提供全双工通信&…

2025数学建模美赛|赛题翻译|E题

2025数学建模美赛&#xff0c;E题赛题翻译 更多美赛内容持续更新中...

【Elasticsearch】Elasticsearch的查询

Elasticsearch的查询 DSL查询基础语句叶子查询全文检索查询matchmulti_match 精确查询termrange 复合查询算分函数查询bool查询 排序分页基础分页深度分页 高亮高亮原理实现高亮 RestClient查询基础查询叶子查询复合查询排序和分页高亮 数据聚合DSL实现聚合Bucket聚合带条件聚合…

什么是循环神经网络?

一、概念 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一类用于处理序列数据的神经网络。与传统的前馈神经网络不同&#xff0c;RNN具有循环连接&#xff0c;可以利用序列数据的时间依赖性。正因如此&#xff0c;RNN在自然语言处理、时间序列预测、语…

零售EDI:Costco EDI 项目须知

Costco 是全球领先的会员制仓储式零售商&#xff0c;致力于为会员提供高品质且价格实惠的商品。其经营范围涵盖食品、电子产品、家居用品、服装和办公设备等多个领域。 Costco 的 EDI 对接需求分析 为了更高效地管理其复杂的全球供应链&#xff0c;Costco 采用了先进的 EDI&am…

Kafka运维宝典 (三)- Kafka 最大连接数超出限制问题、连接超时问题、消费者消费时间超过限制问题详细介绍

Kafka运维宝典 &#xff08;三&#xff09; 文章目录 Kafka运维宝典 &#xff08;三&#xff09;一、Kafka Broker 配置中的最大连接数超出限制问题1. 错误原因2. 相关 Kafka 配置参数2.1 connections.max2.2 max.connections.per.ip2.3 num.network.threads2.4 connections.ma…

模板泛化类如何卸载释放内存

CustomWidget::~CustomWidget() {for (size_t i 0; i < buttonManager.registerItem.size(); i) {delete buttonManager.registerItem(exitButton);} } 以上该怎么写删除对象操作&#xff0c;类如下&#xff1a;template <typename T> class GenericManager { public…

在Linux系统上安装.NET

测试系统&#xff1a;openKylin(开放麒麟) 1.确定系统和架构信息&#xff1a; 打开终端&#xff08;Ctrl Alt T&#xff09;&#xff0c;输入cat /etc/os-release查看系统版本相关信息。 输入uname -m查看系统架构。确保你的系统和架构符合.NET 的要求&#xff0c;如果架构…

28. 【.NET 8 实战--孢子记账--从单体到微服务】--简易报表--报表定时器与报表数据修正

这篇文章是《.NET 8 实战–孢子记账–从单体到微服务》系列专栏的《单体应用》专栏的最后一片和开发有关的文章。在这片文章中我们一起来实现一个数据统计的功能&#xff1a;报表数据汇总。这个功能为用户查看月度、年度、季度报表提供数据支持。 一、需求 数据统计方面&…

深入探索C++17的std::any:类型擦除与泛型编程的利器

文章目录 基本概念构建方式构造函数直接赋值std::make_anystd::in_place_type 访问值值转换引用转换指针转换 修改器emplaceresetswap 观察器has_valuetype 使用场景动态类型的API设计类型安全的容器简化类型擦除实现 性能考虑动态内存分配类型转换和异常处理 总结 在C17的标准…