【CSU 1529】Equator (前缀和,双端队列)
来源:互联网 发布:centos 6.8 搭建lnmp 编辑:程序博客网 时间:2024/06/01 17:29
Equator
Description
Input
Output
Sample Input
3
3 1 2 3
8 4 5 -1 -1 1 -1 -1 5
2 -1 -1
Sample Output
6
14
0
题意:
输入数据:T数据组数
接下来T行,第一个数字n为个数。接下来有n个数(正/负都可能有)。求出这些数字(要保证相邻)最大的和。
思路:
用前缀和法预处理出数组每个数的前缀和。扩充至2*MAX以便双端队列的处理,之后用双端队列求出最大的和。
代码示例:
#include<iostream>#include<cstring>#include<cmath>using namespace std; #define MAX 1000005int a[2*MAX],sum[2*MAX];int deque[2*MAX];//双端队列 int main(){ int t; cin>>t; while(t--) { int n ; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; a[i+n]=a[i]; } for(int i=1;i<n*2;i++) sum[i]=sum[i-1]+a[i]; int ans=0; int start=0,tail=-1; for(int i=1;i<2*n;i++) { while(start<=tail&&sum[i]<sum[deque[tail]]) { ans=max(ans,sum[deque[tail]]-sum[deque[start]]); tail--; } while(start<=tail&&i-deque[start]>n) { ans=max(ans,sum[deque[tail]]-sum[deque[start]]); start++; } deque[++tail]=i; } ans=max(ans,sum[deque[tail]]-sum[deque[start]]); cout<<ans<<endl; } return 0; }
阅读全文
0 0
- 【CSU 1529】Equator (前缀和,双端队列)
- CSU 1529 Equator(双端队列)
- CSU 1529 - Equator(双端队列)
- CSU 1529 Equator DP
- CSU 1529: Equator(dp)
- CSU 1809: Parenthesis【前缀和】
- CSU 1809 Parenthesis 【前缀和+RMQ】
- CSU 1809 Parenthesis(线段树前缀和)
- Feel Good (前缀和+单调队列)
- 前缀式计算(栈和队列)
- CSU 1598 最长公共前缀
- CSU-1598 最长公共前缀
- CSU-ACM 1838: Water Pump(单调栈+前缀后缀和)
- 后缀数组 CSU - 1598 最长公共前缀
- CSU 1598 最长公共前缀 【KMP】
- CSU 1809 Parenthesis 思维,前缀RMQ
- CSU 1598: 最长公共前缀(KMP)
- CSU Problem 1809 Parenthesis(括号匹配,线段树,前缀和)——湖南省第十二届大学生计算机程序设计竞赛
- 【整数划分+DP】HDU_1028_D
- hdu 6097 Mindis
- STM32定时器(TIM)之通用定时器
- 退出和退出状态码
- Cocos Creator Joystick虚拟摇杆
- 【CSU 1529】Equator (前缀和,双端队列)
- Spring(1)Ioc和Aop底层原理
- Java异常处理,学习留档
- leetcode 198. House Robber | 动态规划
- 递归和非递归分别实现求n的阶乘
- 实现自己的strcpy和memcpy
- epoll源码剖析
- 二叉搜索树
- java中设置网络代理