洛谷 P2659 美麗的序列 解題報告

2022-04-30 04:48:10 字數 843 閱讀 2296

gd是乙個熱衷於尋求美好事物的人,一天他拿到了乙個美麗的序列。

為了研究這個序列的美麗程度,gd定義了乙個序列的「美麗度」和「美麗係數」:對於這個序列的任意乙個區間\([l,r]\),這個區間的「美麗度」就是這個區間的長度與這個區間的最小值的乘積,而整個序列的「美麗係數」就是它的所有區間的「美麗度」的最大值。現在gd想要你幫忙計算這個序列的「美麗係數」。

第一行乙個整數n,代表序列中的元素個數。 第二行n個整數a1、a2„an,描述這個序列。

一行乙個整數,代表這個序列的「美麗係數」。

對於100%的資料,\(1<=n<=2000000,0<=ai<=2000000\)

思路:維護每個值作為某個區間的最小值時,可以到達的區間長度。

用乙個單增的單調棧從兩邊分別維護一遍即可。

code:

#include #define ll long long

ll max(ll x,ll y)

const int n=2000010;

ll read()

return x;

}int s[n],tot,n;

ll a[n],l[n],r[n];

int main()

tot=0;

for(int i=n;i;i--)

ll ans=0;

for(int i=1;i<=n;i++)

ans=max(ans,(l[i]+r[i]-1)*a[i]);

printf("%lld\n",ans);

return 0;

}

2018.7.23

洛谷 P2659 美麗的序列

單調棧維護區間最小值,單調遞增棧維護區間最小值,考慮當前數對答案的貢獻,不斷加入數,如果加入的數 棧頂,說明棧頂的元素對當前數所在區間是有貢獻的,同時加入當前的數。反之,若當前加入的數比棧頂元素小,那麼棧頂元素 所謂的最小值 已經失去了價值,因為他不會再對後面的區間造成影響,所以彈出棧頂,同時更新 ...

洛谷P2659 美麗的序列

題目 該題目可以用輔助陣列l i r i 來指向以data i 為最小值的左端點和右端點。然後最後列舉每個data i 尋找每個data i 的美麗值的最大值。然後輔助陣列可以用單調棧求出。include include include include include include define ...

洛谷P2659 美麗的序列

gd是乙個熱衷於尋求美好事物的人,一天他拿到了乙個美麗的序列。為了研究這個序列的美麗程度,gd定義了乙個序列的 美麗度 和 美麗係數 對於這個序列的任意乙個區間 l,r 這個區間的 美麗度 就是這個區間的長度與這個區間的最小值的乘積,而整個序列的 美麗係數 就是它的所有區間的 美麗度 的最大值。現在...