題意:給出n個數,讓我們求出乙個最大的平均值
求平均值的區間只能在【s,t】這樣的乙個範圍內選取
假如【3 ,4】,則表明可以選擇乙個區間大小為3或者4的,而不能選擇其他大小
思路:首先二分答案,即:二分最大平均值。
我們將a全部減去mid,問題轉化為判斷是否存在乙個長度在s~t範圍內的區間它的和為正,如果有說明還有更大的平均值。
用字首和和單調佇列維護。
然後用單調佇列求出sum[i]-min(sum[i-t]~sum[i-s]),然後判斷是否大於0即可。
1 #include2view codeusing
namespace
std;
3const
int maxn=1e5+10;4
inta[maxn];
5double sum[maxn];int
q[maxn];
6int
n,s,t;
7bool check(double
mid)818
return0;
19}20int
main()
2126
double l=-10000;27
double r=10000;28
while(r-l>=1e-5)33
else36}
37 printf("
%.3f\n
",l);
38return0;
39 }
洛谷 P1419 尋找段落(單調佇列,二分
p1419 尋找段落 題意 在n個元素中找l size r的最大連續段落平均值。思路1 先求字首和,雙重迴圈暴力找最大平均值。如下 include include include include include include include include include include incl...
P1419 尋找段落 二分答案 單調佇列
好久沒寫題了,拼死拼活才寫了道綠題。題目中要我們求一段數列的平均值,這段數的長度被限定在s t之間。那麼我們可以用二分法列舉答案,之後來尋找區間,如果這些區間之中有乙個區間中的數減去二分出的答案的和要比二分出的答案要大,則說明這個二分答案比我們要求的真正的答案要小,則改變區間重新列舉。如果沒有任何乙...
洛谷P1419 尋找段落 二分 單調佇列
給定乙個長度為n的序列a i,定義a i 為第i個元素的價值。現在需要找出序列中最有價值的 段落 段落的定義是長度在 s,t 之間的連續序列。最有價值段落是指平均值最大的段落,段落的平均值 段落總價值 段落長度。輸入格式 第一行乙個整數n,表示序列長度。第二行兩個整數s和t,表示段落長度的範圍,在 ...