题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=3415

题目大意:

给n个数凑成环状,求某一区间,使得该区间长度不超过k,且总和最大。

解题思路:

区间总和,很容易想到保存前缀和,区间【i,j】的和即为sum[j]-sum[i].

对于每一个以j结束的区间,求出最小的i,(i>=j-k),也即使得sum[j]-sum[i]最大。

所以可以用单调队列维护一个最小的sum[i],对于每一个j,压进j-1.(因为是要减去前面的)

代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#define eps 1e-6
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define ll __int64
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std; #define Maxn 110000
int sa[Maxn];
int sum[Maxn<<1];
int q[Maxn<<1];
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int t,n,k; scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
sum[0]=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&sa[i]);
sum[i]=sum[i-1]+sa[i];
}
for(int i=n+1;i<n+k;i++)
sum[i]=sum[i-1]+sa[i-n];
//n+=k-1;
int head=0,tail=0,s,e;
int ans=-INF;
q[0]=0; for(int i=1;i<n+k;i++)
{
while(head<=tail&&sum[i-1]<=sum[q[tail]])//保证最短
tail--;
q[++tail]=i-1;
while(q[head]+1<i-k+1)
head++;
if(sum[i]-sum[q[head]]>ans)//保证初始位置最小
{
ans=sum[i]-sum[q[head]];
s=q[head]+1;
e=i;
}
}
printf("%d %d %d\n",ans,s,e>n?e%n:e); }
return 0;
}

单调队列-hdu-3415-Max Sum of Max-K-sub-sequence的更多相关文章

  1. 单调队列(数列中长度不超过k的子序列和的最值)

    ★实验任务 小 F 很爱打怪,今天因为系统 bug,他提前得知了 n 只怪的出现顺序以及击 倒每只怪得到的成就值 ai.设第一只怪出现的时间为第 1 秒,这个游戏每过 1 秒 钟出现一只新怪且没被击倒 ...

  2. hdu 1003 Max Sum (DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others)   ...

  3. HDU 1081:To The Max

    To The Max Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  4. 单调队列 && 斜率优化dp 专题

    首先得讲一下单调队列,顾名思义,单调队列就是队列中的每个元素具有单调性,如果是单调递增队列,那么每个元素都是单调递增的,反正,亦然. 那么如何对单调队列进行操作呢? 是这样的:对于单调队列而言,队首和 ...

  5. [poj3017] Cut the Sequence (DP + 单调队列优化 + 平衡树优化)

    DP + 单调队列优化 + 平衡树 好题 Description Given an integer sequence { an } of length N, you are to cut the se ...

  6. HDU3183 A Magic Lamp —— 贪心(单调队列优化)/ RMQ / 线段树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183 题解: 方法一:贪心. 在草稿纸上试多几次可以知道,删除数字中从左到右最后一位递增(可以等于)的 ...

  7. poj 3017 Cut the Sequence(单调队列优化DP)

    Cut the Sequence \(solution:\) 这道题出的真的很好,奈何数据水啊! 这道题当时看得一脸懵逼,说二分也不像二分,说贪心也不像贪心,说搜索吧这题数据范围怎么这么大?而且这题看 ...

  8. POJ 2823 Sliding Window (线段树/单调队列)

    题目不说了,可以用线段树或者单调队列,下面附上代码. 线段树: #include <iostream> #include <stdio.h> #include <algo ...

  9. luogu4182 [USACO18JAN] Lifeguards P (单调队列优化dp)

    显然可以先把被覆盖掉的区间去掉,然后排个序,左.右端点就都是单调的 设f[i][j]表示前i个区间中删掉j个,而且钦定i不能删的最大覆盖长度 (如果不钦定,就要有一个删掉的状态,那我无法确定前面的到底 ...

  10. BZOJ4476 JSOI2015送礼物(分数规划+单调队列)

    看到这个式子当然先二分答案.得max-min-(j-i+k)ans>=0. 显然max-min相同的情况下所选区间长度越短越好,所以max和min都应该取在边界.那么实际上我们根本不用管端点是否 ...

随机推荐

  1. 黑马程序员 Java正则表达式,详解反斜线在Java中的作用

    ---------------------- ASP.Net+Android+IO开发S. .Net培训.期待与您交流! ---------------------- 在程序设计过程中,经常需要对获取 ...

  2. [HeadFirst-HTMLCSS学习笔记][第十二章HTML5标记]

    考虑HTML结构 HTML5即是把原来<div>换成一些更特定的元素.能够更明确指示包含什么内容. (页眉,导航,页脚,文章) article nav 导航 header footer t ...

  3. Linux下安装软件的错误

    1. make configure GEN configure/bin/sh: 1: autoconf: not foundmake: *** [configure] Error 127 解决:sud ...

  4. CentOS6.5 --安装orale 11g(上)

    Linux内核版本:Linux version 2.6.32-431.23.3.el6.x86_64 (1)     在Windows上安装Xmanager Enterprise 4工具,该工具是用来 ...

  5. 动态设置Head的Title、Descrption

    HtmlMeta desc = new HtmlMeta(); desc.Name = "Description"; desc.Content = strTitle.ToStrin ...

  6. CMarkUp读写XML(转)

    Fast start to XML in C++ Enough bull. You want to create XML or read and find things in XML. All you ...

  7. Performing Post-Build Event之类的编译错误

    如果编译出现Perror PRJ0019: A tool returned an error code from "Performing Post-Build Event..."之 ...

  8. (原)mkl用到的函数

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5585301.html 计算 $C=\alpha *A*B+\beta *C$: void cblas_ ...

  9. VLC的相关文档以及javascript接口

    参看下面链接:VLC相关文档

  10. JS创建类和对象(好多方法哟!)

    http://www.cnblogs.com/tiwlin/archive/2009/08/06/1540161.html 这是别人写的~~~我借来看看 JavaScript 创建类/对象的几种方式 ...