HDU5696 區間的價值(分治 單調佇列)

2021-07-26 04:37:44 字數 716 閱讀 8882

題目:定義區間的價值為這個區間內最大值和最小值的乘積。給定乙個序列,求這個序列的每個長度的區間價值的最大值。所有測試資料嚴格隨機。

思路:初學分治,感覺挺不好想出來,參考了一下別人的思路。因為要求每個區間最大值和最小值的乘積,先固定最小值,然後列舉最大值,由於確定了最小的一邊,隨著長度增加,區間的價值只可能變大,因此可以用短的區間值更新長的區間值。如果區間的最大價值不包含這個最小值,就以這個最小值為中點,同樣策略遞迴地處理兩邊,在分治的過程中不斷更新結果。

#includeusing namespace std;

typedef long long ll;

int a[100005];

ll tmp[100005],ans[100005];

void solve(int l,int r)

int main()

}ans=maxx*minn;

printf("%lld\n",ans);//長度為1的區間直接輸出最大值即可

for(int i=2;i<=n;++i)//剪枝,上一次的結果可能也是這一次的結果

if(r=minn)//剪枝

int l1=0,l2=0,r1=-1,r2=-1;

ans=0;

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

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

}

HDU 5696 區間的價值

我們定義 區間的價值 為一段區間的最大值 最小值。乙個區間左端點在 l 右端點在 r 那麼該區間的長度為 r l 1 現在聰明的傑西想要知道,對於長度為 k 的區間,最大價值的區間價值是多少。當然,由於這個問題過於簡單。我們肯定得加強一下。我們想要知道的是,對於長度為 1 n的區間,最大價值的區間價...

HDU5696 區間的價值

傳送門 一句話題意 求1 n長度區間最大值與最小值之乘積的最大值 保證資料隨機 time cost 45min solution 比較基本的題 首先統計答案可以針對每個點更新所有長度 這樣可以單調 然後.然後就不會了 發現是資料隨機 所以可以亂搞 對於每個點作為最大值 類似尺取法的方式更新最小值和答...

HDU 5696 區間的價值 暴力

我們定義 區間的價值 為一段區間的最大值 最小值。乙個區間左端點在l,右端點在r,那麼該區間的長度為 r l 1 現在聰明的傑西想要知道,對於長度為k的區間,最大價值的區間價值是多少。當然,由於這個問題過於簡單。我們肯定得加強一下。我們想要知道的是,對於長度為1 n的區間,最大價值的區間價值分別是多...