洛谷P1419 尋找段落 二分 單調佇列

2021-08-25 05:57:43 字數 1077 閱讀 1023

給定乙個長度為n的序列a_i,定義a[i]為第i個元素的價值。現在需要找出序列中最有價值的「段落」。段落的定義是長度在[s,t]之間的連續序列。最有價值段落是指平均值最大的段落,

段落的平均值=段落總價值/段落長度。

輸入格式:

第一行乙個整數n,表示序列長度。

第二行兩個整數s和t,表示段落長度的範圍,在[s,t]之間。

第三行到第n+2行,每行乙個整數表示每個元素的價值指數。

輸出格式:

乙個實數,保留3位小數,表示最優段落的平均值。

輸入樣例#1:複製

3

2 23

-12

輸出樣例#1:複製

1.000
【資料範圍】

對於30%的資料有n<=1000。

對於100%的資料有n<=100000,1<=s<=t<=n,-10000<=價值指數<=10000。

【題目**】

tinylic改編

題解:將問題變為乙個sum-x*l >= 0 的判定性問題,然後就可以二分x ,若區間中存在乙個長度s到t的字首和減去x*l >= 0,則繼續向上二分答案,否則向下,用sum[i] - min(sum[i-t]~~sum[i-s]),同時可以用滑動視窗維護加速。

//sheryang

#includeusing namespace std;

typedef long long ll;

const int maxn=1e6+7;

const int mod=998244353;

int a[maxn],q[maxn];

int n,s,t;

double sum[maxn];

int judge(double m)

return 0;

}int main()

while(r-l>1e-4)

printf("%.3lf\n",l);

return 0;

}

洛谷 P1419 尋找段落(單調佇列,二分

p1419 尋找段落 題意 在n個元素中找l size r的最大連續段落平均值。思路1 先求字首和,雙重迴圈暴力找最大平均值。如下 include include include include include include include include include include incl...

洛谷 P1419 尋找段落

給定乙個長度為n的序列a i,定義a i 為第i個元素的價值。現在需要找出序列中最有價值的 段落 段落的定義是長度在 s,t 之間的連續序列。最有價值段落是指平均值最大的段落,段落的平均值 段落總價值 段落長度。輸入格式 第一行乙個整數n,表示序列長度。第二行兩個整數s和t,表示段落長度的範圍,在 ...

洛谷p1419尋找段落

原題 看到小數,想一下可不可以二分,如果二分怎麼判斷。讓每個值去減mid,找到乙個正值的段落即可,如果沒有l和r的限制,f i max f i 1 0 a i mid即可。但由於l和r,可以使用單調佇列,最小的最優,使你所求的區間最大。include include include include ...