传送门:最大子序和
思路:计算前缀和,单调队列存储下标,枚举求最小值 d[k]=d[k]-d[k-j] (1<=j<=m)
在前k个元素中长度<=m的序列的最大值,所以队列头应该是k-m~k中的最小前缀和。
代码:
- #include
- #include
- #include
- #include
- #include
- #include
- using namespace std;
- const int N=3e5+10;
- int n,m,ans,u;
- int d[N],q[N];
-
- int main()
- {
- cin>>n>>m;
-
- for(int i=1;i<=n;i++)
- {
- scanf("%d",&d[i]);
- d[i]+=d[i-1];
- }
-
- int hh=0,tt=0,res=0;
- for(int i=1;i<=n;i++)
- {
- if(q[hh]
- res=max(res,d[i]-d[q[hh]]);
- while(hh<=tt&&d[q[tt]]>=d[i]) tt--;
- q[++tt]=i;
- }
- cout<
-
- return 0;
- }
-
相关阅读:
【校招VIP】测试技术考点之单元测试&集成测试
Aspose.Words for .NET查找和替换教程——使用元字符查找和替换文本
Transform介绍(1)
新荣耀两周年:一次隘口突围、一场创新盛宴、一场价值跃迁
基于javaweb的在线服装销售商城系统(java+springboot+vue+mysql)
Selenium+Python做web端自动化测试框架实战
【jQuery从入门到精通】
hive数据初始化
【juc学习之路第8天】Condition
LeetCode中等题之替换字符串中的括号内容
-
原文地址:https://blog.csdn.net/m0_62327332/article/details/126200254