求小于等于k长度的最大区间和
2024-08-29 19:43:02
题意
给出一个序列,求长度小于等于k的最大区间和并输出起点和终点
1<=n<=100000
1<=k<=n
题解:先算出前缀和,利用单调队列的性质,在单调队列中存储sum[] 的下标,并保持队列中的前缀和是保持递增的。
类似题 hdu3415
#include<stdio.h>
#include<iostream>
using namespace std;
#define de(x) cout<<#x<<" = "<<x<<endl
const int N = 100010;
const int inf = 100000010;
int que[N],sum[N];
int main()
{
int n,k,a,i,ans,ans1,ans2;
int front,tail;
scanf("%d%d",&n,&k);
sum[0]=0;
for(i=1;i<=n;i++)
{
scanf("%d",&a);
sum[i]=sum[i-1]+a;
}
front = 0;tail = 0;
ans=-inf;
for(i=1;i<=n;i++)
{
while(tail>front&&sum[i-1]<sum[que[tail-1]])
tail--;
que[tail++]=i-1;
while(tail>front&&i-que[front]>k)
front++;
if(ans<sum[i]-sum[que[front]])
{
ans=sum[i]-sum[que[front]];
ans1=que[front]+1;
ans2=i;
}
}
printf("%d %d %d",ans,ans1,ans2);
}
最新文章
- 【转】修改LINUX时间
- 我为什么要拒绝Ctrl+C和Ctrl+V?
- 微信公共平台php用$GLOBALS[";HTTP_RAW_POST_DATA";]收不到信息解决方法
- plsql如果表和函数等显示不出来
- 听同事讲 Bayesian statistics: Part 1 - Bayesian vs. Frequentist
- 山东省赛J题:Contest Print Server
- C#调用VB6写的ActiveX Dll
- JVM 重排序
- Linux KVM 安装配置
- Bootstrap框架的要点--栅格系统
- 情景linux--shell如何实现多线程?
- POJ 2299 -Ultra-QuickSort-树状数组求逆序数
- java去除html代码中含有的html、js、css标签,获取文字内容
- 网页编程工具:EditPlus
- OC变量限定符和属性限定符
- airflow docker
- .net Core 依赖注入 Add********说明
- linux安全分析
- 使用WebDAV实现Office文档在线编辑
- python图片处理(一)