hdu3415 Max Sum of Max-K-sub-sequence 单调队列
//hdu3415 Max Sum of Max-K-sub-sequence
//单调队列
//首先想到了预处理出前缀和利用s[i] - s[j]表示(j,i]段的和
//之后的问题就转换成了求一个最小的s[j]了,这样就能够单调队列
//求最小值。 //队列中维护的是区间的開始的位置j。我们插入队列中的是j-1,由于
//这个时候s[i] - s[j-1]刚好就是[j,i]段闭区间的和 //这里用两种方式实现,一种是stl,一种是手动模拟,两者的速度,測试的
//结果在杭电測试都是一样的,499ms。
//
//单调队列的路还长着,继续走吧 #include <cstdio>
#include <queue>
#include <algorithm>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 8;
ll a[maxn*2];
ll sum[maxn*2];
ll x[maxn * 2];
int deq[maxn * 2];
int n,k;
int mod;
void input(){
scanf("%d%d",&n,&k);
for (int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
for (int i=n+1;i<=2*n;i++){
a[i] = a[i-n];
} sum[0] = 0; for (int i=1;i<=n;i++){
sum[i] = sum[i-1] + a[i];
} for (int i=1;i<k;i++){
sum[i+n]= sum[i+n-1] + a[i];
}
mod = n;
n = n + k - 1; } void solve(){
int s,e;
int head = 0,tail = 0;
ll mx = -1e10;
for (int i=1;i<=n;i++){
while(tail > head && sum[i-1]<=sum[deq[tail-1]])
tail--;
while(tail > head && deq[head]<i-k)
head++;
deq[tail++] = i-1;
if (sum[i] - sum[deq[head]] > mx){
mx = sum[i] - sum[deq[head]];
s = deq[head] + 1;
e = i;
}
} if (e > mod)
e -= mod;
printf("%lld %d %d\n",mx,s,e); //printf("%lld %d\n",x[mk],(mk+k)%n);
} //void solve(){
// int s,e;
// deque<int> deq;
// deq.clear();
// ll mx = -1e10;
// for (int i=1;i<=n;i++){
// while(!deq.empty() && sum[i-1]<=sum[deq.back()])
// deq.pop_back();
// while(!deq.empty() && deq.front()<i-k)
// deq.pop_front();
// deq.push_back(i-1);
// if (sum[i] - sum[deq.front()]>mx){
// mx = sum[i] - sum[deq.front()];
// s = deq.front() + 1;
// e = i;
// }
// }
//
// if (e > mod)
// e -= mod;
// printf("%lld %d %d\n",mx,s,e);
//
// //printf("%lld %d\n",x[mk],(mk+k)%n);
//} int main(){
//freopen("1.txt","r",stdin);
int t;
scanf("%d",&t);
while(t--){
input();
solve();
}
return 0;
}
hdu3415 Max Sum of Max-K-sub-sequence 单调队列的更多相关文章
- poj3017 Cut the Sequence 单调队列 + 堆 dp
描述 把一个正数列 $A$分成若干段, 每段之和 不超过 $M$, 并且使得每段数列的最大值的和最小, 求出这个最小值. 题目链接 题解 首先我们可以列出一个$O(n^2)$ 的转移方程 : $F_i ...
- $Poj3017\ Cut\ The\ Sequence$ 单调队列优化$DP$
Poj AcWing Description 给定一个长度为N的序列 A,要求把该序列分成若干段,在满足“每段中所有数的和”不超过M的前提下,让“每段中所有数的最大值”之和最小. N<=10 ...
- POJ 3709 K-Anonymous Sequence (单调队列优化)
题意:给定一个不下降数列,一个K,将数列分成若干段,每段的数字个数不小于K,每段的代价是这段内每个数字减去这段中最小数字之和.求一种分法使得总代价最小? 思路:F[i]表示到i的最小代价.f[i]=m ...
- hdu 1003 Max Sum (DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others) ...
- HDU3415:Max Sum of Max-K-sub-sequence(单调队列)
Problem Description Given a circle sequence A[1],A[2],A[3]......A[n]. Circle sequence means the left ...
- hdu3415 Max Sum of Max-K-sub-sequence
Max Sum of Max-K-sub-sequence Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64 ...
- Max Sum of Max-K-sub-sequence hdu3415
Max Sum of Max-K-sub-sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- K - Max Sum Plus Plus
K - Max Sum Plus Plus Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I6 ...
- [LeetCode] Max Sum of Rectangle No Larger Than K 最大矩阵和不超过K
Given a non-empty 2D matrix matrix and an integer k, find the max sum of a rectangle in the matrix s ...
随机推荐
- Jest+Enzyme React js/typescript测试环境配置案例
本文案例github:https://github.com/axel10/react-jest-typescript-demo 配置jest的react测试环境时我们可以参考官方的配置教程: http ...
- HDU 2829 Lawrence
$dp$,斜率优化. 设$dp[i][j]$表示前$i$个数字切了$j$次的最小代价.$dp[i][j]=dp[k][j-1]+p[k+1][i]$.观察状态转移方程,可以发现是一列一列推导出来的.可 ...
- 使用Xshell上传下载文件
很多时候我们需要在Windows跟Linux之间,或者Linux跟Linux之间传文件,这里我们讲的是使用Xshell实现文件上传下载. 一.使用rz,sz实现Windows,linux上传下载 1. ...
- Codeforces #436 Div2 E
#436 Div2 E 题意 某人的房子着火了,现在有 \(n\) 件物品待抢救,每件物品有抢救需要的时间和自身的价值,以及过多长时间物品会损坏.问最多一共可以抢救价值多少的物品? 分析 看数据就知道 ...
- hdu6052
hdu6052 题意 给出一个 \(n * m\) 的网格矩阵,每个格子都有颜色,随机选出一个子矩阵,问颜色种数的期望. 分析 那么我们可以去算所有矩阵的颜色种数之和,也就是每种颜色出现过的矩阵的个数 ...
- Mysql数据库的安装及配置
本文转载自http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建 ...
- 【秦九韶算法】【字符串哈希】bzoj3751 [NOIP2014]解方程
在模意义下枚举m进行验证,多设置几个模数,而且小一些,利用f(x+p)%p=f(x)%p降低计算次数.UOJ AC,bzoj OLE. #include<cstdio> #include& ...
- 【模拟】bzoj2295 【POJ Challenge】我爱你啊
#include<cstdio> #include<cstring> using namespace std; int n; char s[100001],table[]=&q ...
- 【二分图判定】hdu3478 Catch
详细的题解:http://www.docin.com/p-517243379.html 一个图是二分图 等价于 其至少有两个节点且没有奇环. 二分图判定的方法:从任意点出发进行一次dfs黑白染色,若某 ...
- 【欧拉函数】BZOJ2190-[SDOI2012]longge的数学问题
[题目大意] 求出∑gcd(i, N)(1<=i <=N). [思路] 对于x=ak,y=bk,若gcd(a,b)=1则必有gcd(x,y)=1.枚举N的所有因数,∑gcd(i, N)=∑ ...