我們定義「區間的價值」為一段區間的最大值*最小值。
乙個區間左端點在l,右端點在r,那麼該區間的長度為(r−l+1)。
現在聰明的傑西想要知道,對於長度為k的區間,最大價值的區間價值是多少。
當然,由於這個問題過於簡單。
我們肯定得加強一下。
我們想要知道的是,對於長度為1∼n的區間,最大價值的區間價值分別是多少。
樣例解釋:
長度為1的最優區間為2−2 答案為6∗6
長度為2的最優區間為4−5 答案為4∗4
長度為3的最優區間為2−4 答案為2∗6
長度為4的最優區間為2−5 答案為2∗6
長度為5的最優區間為1−5 答案為1∗6
多組測試資料
第一行乙個數n(1≤n≤100000)。
第二行n個正整數(1≤ai≤109),下標從1開始。
由於某種不可抗力,ai的值將會是1∼109內隨機產生的乙個數。(除了樣例)
輸出共n行,第i行表示區間長度為i的區間中最大的區間價值。
51 6 2 4 4
3616
1212
6資料全隨機有什麼好說的呢?n^2的演算法很顯然,剪剪枝就過了
直接暴力列舉哪乙個數是這個區間的最大值就好了
然後左右擴充套件,然後暴力莽一波就好了……
#includeusing namespace std;
const int maxn = 1e5+6;
int n;
long long a[maxn];
long long dp[maxn];
void solve()
}for(int i=1;i<=n;i++)printf("%lld\n",dp[i]);
}int main()
HDU 5696 區間的價值
我們定義 區間的價值 為一段區間的最大值 最小值。乙個區間左端點在 l 右端點在 r 那麼該區間的長度為 r l 1 現在聰明的傑西想要知道,對於長度為 k 的區間,最大價值的區間價值是多少。當然,由於這個問題過於簡單。我們肯定得加強一下。我們想要知道的是,對於長度為 1 n的區間,最大價值的區間價...
HDU5696 區間的價值
傳送門 一句話題意 求1 n長度區間最大值與最小值之乘積的最大值 保證資料隨機 time cost 45min solution 比較基本的題 首先統計答案可以針對每個點更新所有長度 這樣可以單調 然後.然後就不會了 發現是資料隨機 所以可以亂搞 對於每個點作為最大值 類似尺取法的方式更新最小值和答...
HDU5696 區間的價值(分治 單調佇列)
題目 定義區間的價值為這個區間內最大值和最小值的乘積。給定乙個序列,求這個序列的每個長度的區間價值的最大值。所有測試資料嚴格隨機。思路 初學分治,感覺挺不好想出來,參考了一下別人的思路。因為要求每個區間最大值和最小值的乘積,先固定最小值,然後列舉最大值,由於確定了最小的一邊,隨著長度增加,區間的價值...