P3628 APIO2010 特別行動隊

2022-05-27 19:24:15 字數 591 閱讀 6962

令 \(f_i\) 表示前 \(i\) 個士兵組成特別行動隊的最大修正戰鬥力之和。對 \(x\) 做一遍字首和。

轉移方程:

\[f_i=\max\>x_i

\]兩個負的負負得正不用變號。因為 \(x_i\) 隨著 \(i\) 的增大單調遞增,所以對 \((2a\times x,f+a\times x^2-b\times x)\) 維護下凸包。

code:

#includeusing namespace std;

typedef long long ll;

#define n 1000005

#define db double

#define for(i,x,y)for(i=x;i<=(y);i++)

ll f[n];

int x[n],que[n],a,b,c;

int read()

inline ll sqr(ll p)

inline db slope(int j,int k)

int main()

cout

}

P3628 APIO2010 特別行動隊

題目描述 你有一支由 n 名預備役士兵組成的部隊,士兵從 1 到 n 編號,要將他們拆分 成若干特別行動隊調入戰場。出於默契的考慮,同一支特別行動隊中隊員的編號 應該連續,即為形如的序列。編號為 i 的士兵的初始戰鬥力為 xi 一支特別行動隊的初始戰鬥力 x 為隊內 士兵初始戰鬥力之和,即 通過長期...

P3628 APIO2010 特別行動隊

轉移方程 f i max f j a s i s j 2 b s i s j c 寫成可以斜率優化的式子 f j a s j 2 b s j c 2 a s i s j f i a s j 2 b s i 然後求 f i 最大值,於是維護上凸包 橫座標單調增,斜率單調減,所以直接上單調佇列即可。in...

P3628 APIO2010 特別行動隊

你有一支由 n 名預備役士兵組成的部隊,士兵從 1 到 n 編號,要將他們拆分 成若干特別行動隊調入戰場。出於默契的考慮,同一支特別行動隊中隊員的編號 應該連續,即為形如 i,i 1,i k 的序列。編號為 i 的士兵的初始戰鬥力為 xi 一支特別行動隊的初始戰鬥力 x 為隊內 士兵初始戰鬥力之和,...