模板 P1182 數列分段II 二分答案

2022-05-25 15:36:08 字數 498 閱讀 7395

題意:給定一列數,分成m段,使每段和的最大值最小。

考慮二分最小段和size,答案顯然滿足單調性。可以在每次check中累加數列元素判斷當前組的總和是否在size以內。由於序列元素均為非負整數,字首和陣列的值滿足非嚴格單調遞增,那麼可以在字首和上再套乙個二分來優化暴力累加的過程。

我不知道優化以後的複雜度怎麼分析,反正它跑的快多了

**:#include 

#include 

#define maxn 100010   

using namespace std;  

int a[maxn], n, m;  

long long s[maxn];  

bool div(int sum)   

++cnt, i = l + 1;  

}  return cnt <= m;  

}  int main()   

cout << l;  

return 0;  

}  

P1182 數列分段 Section II(二分)

題目 對於給定的乙個長度為n的正整數數列 a1 na a1 n 現要將其分成 m m n 段,並要求每段連續,求每段和的最大值最小。solve 顯然的最大值最小化問題,用二分。列舉答案,列舉的範圍 只要從陣列中最大的那個數列舉到所有數的和就行了。include using namespace std...

二分答案 洛谷P1182 數列分段

將一段數列分成不超過 m m 的段,使得每段的最小的最大值 一般看到最小 最大 什麼的基本都用二分 因為最大值要盡量小,所以資料必然具有單調性,所以我們可以通過二分最大值 即最終答案 來求解。中間加上判斷即可 include using namespace std int l,r,mid,a 100...

洛谷P1182 數列分段(二分 貪心)

題目描述 對於給定的乙個長度為n的正整數數列 a a 1 n 現要將其分成 mm m leq nm n 段,並要求每段連續,且每段和的最大值最小。關於最大值最小 例如一數列 4 2 4 5 14 2 4 5 1 要分成 33 段。將其如下分段 4 2 4 5 1 4 2 4 5 1 第一段和為 66...