迴圈陣列最大欄位和(51Nod-1050)
題目
N個整陣列成的迴圈序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的連續的子段和的最大值(迴圈序列是指n個數圍成一個圈,因此需要考慮a[n-1],a[n],a[1],a[2]這樣的序列)。當所給的整數均為負數時和為0。
例如:-2,11,-4,13,-5,-2,和最大的子段為:11,-4,13。和為20。輸入
第1行:整數序列的長度N(2 <= N <= 50000)
第2 - N+1行:N個整數 (-10^9 <= S[i] <= 10^9)輸出
輸出迴圈陣列的最大子段和。
輸入樣例
6
-2
11
-4
13
-5
-2輸出樣例
20
思路:求字首和後使用雙端佇列模擬即可
源程式
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define PI acos(-1.0)
#define E 1e-12
#define INF 0x3f3f3f3f
#define LL long long
const int MOD=1000000007;
const int N=100000+5;
const int dx[]= {-1,1,0,0};
const int dy[]= {0,0,-1,1};
using namespace std;
deque<int> Q;
LL sum[N];
LL v[N];
int main() {
int n;
scanf("%d",&n);
Q.clear();
sum[0]=0;
LL ans=-INF;
Q.push_back(0);
for(int i=1; i<=n; i++) {
scanf("%lld",&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];
}
for(int i=1; i<=2*n; i++) {
while(!Q.empty() && Q.front()<i-n)
Q.pop_front();
ans=max(ans,sum[i]-sum[Q.front()]);
while(!Q.empty() && sum[Q.back()]>=sum[i])
Q.pop_back();
Q.push_back(i);
}
printf("%lld\n",ans);
return 0;
}
相關文章
- 陣列迴圈陣列
- while迴圈和do迴圈、緩衝區、一維陣列While陣列
- for..in 迴圈陣列需注意陣列
- js陣列迴圈方法對比JS陣列
- 靜態佇列,迴圈陣列實現佇列陣列
- ASP.NET Razor – VB 迴圈和陣列簡介ASP.NET陣列
- 陣列常見的遍歷迴圈方法、陣列的迴圈遍歷的效率對比陣列
- 佇列 和 迴圈佇列佇列
- 多執行緒迴圈控制欄位失效造成死迴圈的坑執行緒
- 手擼MQ訊息佇列——迴圈陣列MQ佇列陣列
- JS陣列迴圈的效能和效率分析(for、while、forEach、map、for of)JS陣列While
- ASP.NET Razor – C# 迴圈和陣列簡介ASP.NETC#陣列
- 動態規劃最大欄位和動態規劃
- 最大連續子陣列和(最大子段和)陣列
- php 迴圈陣列引用傳值改變陣列本身的值PHP陣列
- 53. 最大子陣列和陣列
- 求二維陣列中最大子陣列的和陣列
- Go_ if else語句 ,,迴圈,,switch,,陣列Go陣列
- 457. 環形陣列是否存在迴圈陣列
- 習題8-3 陣列迴圈右移 及 練習7-8 方陣迴圈右移陣列
- PHP陣列多個欄位分別排序PHP陣列排序
- for迴圈無法刪除陣列所有指定元素陣列
- [PAT B] 1008 陣列元素迴圈右移問題陣列
- 1008 陣列元素迴圈右移問題 (20分)陣列
- LeetCode53. 最大子陣列和LeetCode陣列
- [Python手撕]最大子陣列和Python陣列
- 在迴圈陣列時使用splice()方法刪除陣列遇到的問題陣列
- js陣列操作——物件陣列根據某個相同的欄位分組JS陣列物件
- 二維陣列根據欄位進行排序陣列排序
- 二維陣列根據某個欄位排序陣列排序
- 大資料之JAVA基礎(五):迴圈和陣列方法練習大資料Java陣列
- 第四章:多維陣列和矩陣 ------------- 4.7 子陣列最大累加和陣列矩陣
- 1008 陣列元素迴圈右移問題 (20 分)java陣列Java
- Go 處理大陣列:使用 for range 還是 for 迴圈?Go陣列
- 【力扣】最大子陣列和(貪心)力扣陣列
- PHP 二維陣列, 按某一個欄位排序PHP陣列排序
- 2397 求最大值 迴圈
- LeetCode 迴圈佇列LeetCode佇列