当前位置: 首页 > news >正文

洛谷 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







http://www.jsqmd.com/news/245091/

相关文章:

  • 交通仿真软件:SUMO_(15).高级仿真技术:微观与宏观仿真结合
  • 基于小程序的篮球场馆预订系统-计算机毕业设计源码+LW文档
  • C#上位机源代码,采集西门子200smart温度数据并显示波形曲线,温度到达上限值或下限值进行...
  • 探索光伏发电三相并网技术:从原理到实现
  • 永磁同步电机(PMSM)匝间短路故障Simulink仿真探索
  • 【码力全开特辑直播预告】1月15日晚7点,AscendNPU IR架构开源解读
  • 交通仿真软件:SUMO_(23).交通仿真中的行人与自行车模型
  • Tailwind CSS vs Bootstrap vs ElementUI(ElementPlus) 全面对比表
  • 西门子PLC实现冷热水恒压供水系统开发之旅
  • 下一代CMO的核心课题:通过GEO优化,管理AI口中的“品牌第二身份”
  • 【毕业设计】基于深度学习的是否有污渍识别基于python-cnn深度学习的是否有污渍识别
  • 全阶滑模无位置传感器控制仿真模型,有基本的反正切的,有锁相环的,有基本的开关函数,有饱和函数...
  • 信创超融合怎么选?透过IDC 2025报告看主流国产超融合解决方案
  • 53、UART 串口通信
  • DevOps与SRE概念理解
  • 项目的逻辑和流程
  • 乐迪信息:AI视频分析技术如何定义和检测船舶逆行?
  • 2025互联网年度盘点:从Cloudflare看AI如何重塑全球网络格局
  • 深度学习计算机毕设之基于卷神经网络的是否有污渍识别基于python-cnn深度学习的是否有污渍识别
  • 直接说工控现场的单容液位控制,S7-200搭配组态王这套组合挺经典的。今天咱们拆解个真实项目的配置过程,手把手把程序逻辑和画面组态揉碎了讲
  • vrrp实例script和 real_server中的HTTP_GET健康检查区别,使用场景总结
  • aa---(9)
  • 【课程设计/毕业设计】基于python-cnn深度学习的是否有污渍识别基于python-cnn的是否有污渍识别
  • LVS Nginx反向代理高可用实践
  • 基于MATLAB/Simulink的Statcom静止无功补偿器仿真探秘
  • 乐迪信息:船舶AI逆行检测有效遏制水上交通违规
  • matlab/simulink三相四桥臂逆变器仿真模型 采用的是电压外环电流内环控制策略,交流...
  • Flutter---时间核心类
  • C#源码 上位机 SECS协议,里面包含各种进制转换,用于半导体行业,程序全源码
  • aa---(6)