博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[单调队列] hdu 3415 Max Sum of Max-K-sub-sequence
阅读量:5229 次
发布时间:2019-06-14

本文共 1215 字,大约阅读时间需要 4 分钟。

题意:

给n和k,再给你n个形成环的数

问你连续不超过k个数的最大和是多少

并输出区间,和一样以左端点最小。再一样以长度最小

思路:

我们记录前缀和sum[i]

开一个单调队列维护sum[i-1]的值最小

由于对于到当前位置的和为sum[i]-sum[j] 假设sum[j]越小,那么sum[i]就越大

所以里面维护的就是到当前位置符合要求最小的sun[j]

代码:

#include"cstdlib"#include"cstdio"#include"cstring"#include"cmath"#include"queue"#include"algorithm"#include"iostream"#include"map"using namespace std;#define N 222222int sum[N],v[N];int q[2*N];int main(){    int t;    cin>>t;    while(t--)    {        int n,k;        scanf("%d%d",&n,&k);        //deque
q; sum[0]=0; for(int i=1;i<=n;i++) { scanf("%d",&v[i]); sum[i]=sum[i-1]+v[i]; } for(int i=n+1;i<2*n;i++) sum[i]=sum[i-1]+v[i-n]; int ans=-999999999,x,y; int top=0,ed=0; for(int i=1;i<2*n;i++) { while(top
=sum[i-1]) ed--; q[ed++]=i-1; while(top
k) top++; int tep=sum[i]-sum[q[top]]; if(tep>ans) { ans=tep; x=q[top]+1; y=i; } } if(y>n) y-=n; printf("%d %d %d\n",ans,x,y); } return 0;}

转载于:https://www.cnblogs.com/zsychanpin/p/7239221.html

你可能感兴趣的文章
手机验证码执行流程
查看>>
python 基础 ----- 变量
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
:hover 鼠标同时触发两个元素变化
查看>>
go语言学习十三 - 相等性
查看>>
Idea 提交代码到码云(提交到github也大同小异)
查看>>
c#连接excel2007未安装ISAM解决
查看>>
Mono 异步加载数据更新主线程
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
张季跃 201771010139《面向对象程序设计(java)》第四周学习总结
查看>>
如何解除循环引用
查看>>
android中fragment的使用及与activity之间的通信
查看>>
字典【Tire 模板】
查看>>
jquery的contains方法
查看>>
python3--算法基础:二分查找/折半查找
查看>>
Perl IO:随机读写文件
查看>>
Perl IO:IO重定向
查看>>
转:基于用户投票的排名算法系列
查看>>