#P14581. [Bulgarian 2025]stock

    ID: 13798 传统题 1200ms 512MiB 尝试: 2 已通过: 1 难度: 7 上传者: 标签>CF2300贪心线段树数据结构模拟动态规划

[Bulgarian 2025]stock

题目描述

商店在过去的 NN 天中每天都会以价格 p1,p2,,pNp_1,p_2,\dots,p_N 买卖某种物品。

你可以进行若干次交易,每次交易由两个下标 i<ji<j 决定,表示在第 ii 天买入、在第 jj 天卖出,这次交易的利润为:

pjpip_j-p_i

在任意时刻,你至多只能持有一件该物品。因此,不同交易之间不能“交叉”。更形式化地说,若你进行的交易依次为

(i1,j1),(i2,j2),,(im,jm)(i_1,j_1),(i_2,j_2),\dots,(i_m,j_m)

则必须满足:

i1<j1i2<j2im<jmi_1<j_1\le i_2<j_2\le \cdots \le i_m<j_m

对于固定的 KK,求“至多进行 KK 次交易时的最大利润”并不难;现在你需要对每个 KK1KN1\le K\le N)都求出对应的最大利润。

输入格式

第一行输入一个整数 NN1N5000001\le N\le 500000),表示天数。
第二行输入 NN 个整数 p1,p2,,pNp_1,p_2,\dots,p_N1pi1091\le p_i\le 10^9),表示每天的价格。

输出格式

输出 NN 个整数,其中第 KK 个整数表示:当最多允许进行 KK 次交易时,可以获得的最大利润。

数据范围与子任务

子任务 分值 NN\le
1 11 20
2 25 2000
3 10 10000
4 26 100000
5 28 500000

样例输入

10
90 10 30 20 40 35 30 50 40 70

样例输出

60 70 80 90 90 90 90 90 90 90

样例解释

1010 天的价格依次为:

90,10,30,20,40,35,30,50,40,7090,10,30,20,40,35,30,50,40,70

X+X^+ 表示“以价格 XX 买入”,用 X-X 表示“以价格 XX 卖出”。

下面给出若干种最优方案:

KK 一种最优交易方式 利润
1 在价格 1010 时买入,在价格 7070 时卖出 6060
2 在价格 1010 买入、4040 卖出;再在价格 3030 买入、7070 卖出 30+40=7030+40=70
3 在价格 1010 买入、3030 卖出;在价格 2020 买入、5050 卖出;在价格 4040 买入、7070 卖出 20+30+30=8020+30+30=80
4 到 10 可以把上涨区间继续拆分,最大利润达到 9090