news 2026/6/12 19:51:15

洛谷 T478345:循环数组 ← 单调队列 + 破环成链

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
洛谷 T478345:循环数组 ← 单调队列 + 破环成链

【题目来源】
https://www.luogu.com.cn/problem/T478345

【题目描述】
给你一个循环的数组 A[1], A[2], A[3], ...., A[n]。循环的数组意思是 A[1] 的左边是 A[n],A[n] 的右边是 A[1],也就是可以理解为他们连成了一个环。
现在你的任务是找到一个字串( A[1,2,3] 算子串,A[n-1,n,1,2] 也算,但是必须连续,A[1,3,4] 则不算),这个子串要求长度小于等于 K。在这个要求下,子串的元素和最大能是多少?
注意子串不能为空。1<=N<=1000000,1<=K<=N,-1000<=A[i]<=1000

【输入格式】
第一行两个整数,N,K,空格隔开。
接下来一行 N 个数,空格隔开,为数组元素 A[1] ... A[n]。​​​​​​​

【输出格式】
输出一行,为一个整数,代表最大和。

【输入样例】
6 3
6 -1 2 -6 5 -5

【输出样例】
7

【数据范围】
1<=N<=1000000,1<=K<=N,-1000<=A[i]<=1000​​​​​​​​​​​​​​

【算法分析】
● 环形数组的经典处理技巧:
破环成链,将原数组拼接一份,得到长度为 2N 的数组,原环形的任意连续子串都对应新数组的一段长度 ≤K 的连续子串。
● 前缀和 + 单调队列优化:利用前缀和将「区间和」转化为「两个前缀和的差值」,用单调队列维护前缀和的最小值,从而在 O(N) 时间内找到最优解。

【算法代码】

#include <bits/stdc++.h> using namespace std; typedef long long LL; const int maxn=1e6+5; LL imax=LLONG_MIN; LL s[maxn<<1]; //presum int a[maxn]; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,k; cin>>n>>k; for(int i=1; i<=n; i++) { cin>>a[i]; } for(int i=1; i<=n+k; i++) { //破环成链 s[i]=s[i-1]+a[(i-1)%n+1]; //环形取数 } deque<int> q; //单调队列存下标,保证s[下标]单调递增 q.push_back(0); for(int i=1; i<=n+k-1; i++) { while(!q.empty() && q.front()<i-k) { q.pop_front(); } if(!q.empty()) { imax=max(imax,s[i]-s[q.front()]); } while(!q.empty() && s[i]<=s[q.back()]) { q.pop_back(); } q.push_back(i); } cout<<imax<<endl; return 0; } /* in: 6 3 6 -1 2 -6 5 -5 out: 7 */





【参考文献】
​​​​​​​
https://blog.csdn.net/hnjzsyjyj/article/details/143176072
https://www.luogu.com.cn/problem/T478345







版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 16:26:22

vrrp实例script和 real_server中的HTTP_GET健康检查区别,使用场景总结

Keepalived核心健康检查&#xff1a;VRRP Script & HTTP_GET 在Keepalived高可用集群部署中&#xff0c;健康检查是保障服务连续性的核心机制。其中VRRP实例的script脚本检查与real_server的HTTP_GET检查是最常用的两种方式。 一、核心差异&#xff1a;从检测对象到作用机制…

作者头像 李华
网站建设 2026/6/12 16:26:23

Vue3:泛型类型声明 vs 运行时选项声明 语法对比

Vue 3 提供了两种 props 声明方式&#xff1a;泛型类型声明和运行时选项声明。泛型类型声明&#xff08;defineProps<{prop:Type}>()&#xff09;在编译时进行类型检查&#xff0c;完全支持 TypeScript&#xff0c;适合新项目和追求类型安全的场景。运行时选项声明&#…

作者头像 李华
网站建设 2026/6/12 15:59:40

2025互联网年度盘点:从Cloudflare看AI如何重塑全球网络格局

Cloudflare作为全球最大的互联网基础设施公司之一&#xff0c;其网络遍布125个国家的330座城市&#xff0c;平均每秒处理超过8100万次HTTP请求——把它想象成互联网世界的十字路口并不为过&#xff0c;所有流经的数据都能被它看到。 正因为这种独特的上帝视角&#xff0c;Clou…

作者头像 李华
网站建设 2026/6/12 17:36:59

‌测试覆盖率85%?真正高质团队都在看“AI预测风险热力图”‌

测试覆盖率的迷思与AI时代的变革 在软件测试领域&#xff0c;85%的测试覆盖率曾被视为“黄金标准”——一个象征质量的门槛。团队们为此孜孜不倦&#xff0c;编写海量测试用例&#xff0c;力求覆盖每一行代码。但2026年的今天&#xff0c;我们不得不反思&#xff1a;这真的够了…

作者头像 李华