P1419 尋找段落

2022-08-04 10:09:16 字數 657 閱讀 2689

題目鏈結

思路:首先二分答案,即:二分最大平均值。

我們將a全部減去mid,問題轉化為判斷是否存在乙個長度在s~t範圍內的區間它的和為正,如果有說明還有更大的平均值。

用字首和和單調佇列維護。

然後用單調佇列求出sum[i]-min(sum[i-t]~sum[i-s]),然後判斷是否大於0即可。

#include #include #include using namespace std;

const int maxn = 1e5 + 5;

int n;

int s,t;

int a[maxn];

double sum[maxn];

inline int read()

while (ch >= '0' && ch <= '9')

if (f == -1) k = ~k + 1;

return k;

}

int head = 1,tail = 0,q[maxn];

bool check(double mid)

return false;

}int main()

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

return 0;

}

洛谷 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 ...

洛谷 P1419 尋找段落

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