博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu3415(单调队列)
阅读量:6435 次
发布时间:2019-06-23

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

 

题目链接:

题意:一个长度为n包含正负整数的数环,即第1个的左边是第n个。从中选一个不超过k的序列,使得序列和最大,最大值相同选开始点最小的,开始点相同选长度最小的。

分析:单调队列维护在k个数之内的最小值的下标,然后一直扫一遍就行了,只要懂单调队列这题就是水题了。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long#define mod 1000000007#define inf 0x3f3f3f3f#define N 200010using namespace std;int a[N],que[N],sum[N],l,r;int solve(int n,int k){ for(int i=1;i<=n;i++)sum[i]=sum[i-1]+a[i]; int head,tail,mx=-1000000000; head=tail=0; que[head]=0; for(int i=1;i<=n;i++) { while(head<=tail&&i-que[head]>k)head++; int j=que[head]; if(sum[i]-sum[j]>mx) { mx=sum[i]-sum[j]; l=j+1;r=i; } while(head<=tail&&sum[i]
n/2?l-n/2:l; r=r>n/2?r-n/2:r; return mx;}int main(){ int t,n,k; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++)scanf("%d",&a[i]),a[i+n]=a[i]; int mx=solve(2*n,k); printf("%d %d %d\n",mx,l,r); }}
View Code

 

转载于:https://www.cnblogs.com/lienus/p/4160515.html

你可能感兴趣的文章
[wp7软件]wp7~~各种视频播放器下载大全
查看>>
Java工程师必知之事 —— 如何定义自己的职业路线?
查看>>
代码质量与规范,那些年你欠下的技术债
查看>>
计算机程序的思维逻辑 (19) - 接口的本质
查看>>
CVE-2014-4113漏洞利用过程分析
查看>>
解密MSSQL链接数据库的密码
查看>>
Glide-源码详解
查看>>
你敢在post和get上刁难我,就别怪我装逼了
查看>>
直播 3.0 时代,在线教育行业的裂变和重构
查看>>
SpringBoot使用Nacos服务发现
查看>>
2017双11技术揭秘—阿里巴巴数据库技术架构演进
查看>>
我的友情链接
查看>>
Spring框架 - AOP使用
查看>>
Ansible常用内置属性
查看>>
C#使用正则表达式校验邮箱
查看>>
Linux自动清理N天前目录文件
查看>>
方便 快捷 安全的EVO邮件服务器
查看>>
bash的快捷键
查看>>
关于如何编写linux设备驱动
查看>>
DNS服务
查看>>