POJ - 2018 二分+单调子段和
依然是学习分析方法的一道题
求一个长度为n的序列中的一个平均值最大且长度不小于L的子段,输出最大平均值
最值问题可二分,从而转变为判定性问题:是否存在长度大于等于L且平均值大于等于mid的字段和
每个数与mid作差再转变为求非负子段
子段和问题应该利用前缀和C,长度大于等于L的字段和最大值可表示为
max{Aj+1 + Aj+2 ... + Ai},i-j+1-1>=L,j+1>=1
等价于
max{Ci-min{Cj}},L<=i<=n,0<=j<=i-L
注意是i=L时j=0
只要i单调递增,j也单调递增,可O(1)更新答案,然后不断二分尺取即可
j+1的表示方法值得学习,不然推式子会习惯性把0的可能给忘了
不得不抱怨POJ
浮点二分100次是WA的50次是AC,哪有这种道理
因为只输出到个位while(r-l>1e-5)倒是可以,但显然精度没上面好
/*H E A D*/
int n,L;
double a[maxn],b[maxn],c[maxn];
bool C(double x){
rep(i,1,n) b[i]=a[i]-x;
rep(i,1,n) c[i]=c[i-1]+b[i];
double ans=-1e12;
double mn=1e12;
rep(i,L,n){
mn=min(mn,c[i-L]);
ans=max(ans,c[i]-mn);
}
return ans>=0;
}
int main(){
while(~iin(n)){
iin(L);
rep(i,1,n) din(a[i]);
double l=-1e6,r=1e6;
rep(i,1,50){
double mid=(l+r)/2;
if(C(mid)) l=mid;
else r=mid;
}
printf("%lld\n",(ll)(r*1000));
}
return 0;
}
POJ - 2018 二分+单调子段和的更多相关文章
- 两种解法-树形dp+二分+单调队列(或RMQ)-hdu-4123-Bob’s Race
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 题目大意: 给一棵树,n个节点,每条边有个权值,从每个点i出发有个不经过自己走过的点的最远距离 ...
- [BZOJ1044][HAOI2008]木棍分割 二分 + 单调队列优化dp + 滚动数组优化dp
Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长 ...
- NOIP模拟 最佳序列 - 二分 + 单调队列
题意: 各一个n(\(\le 20000\))的序列,定义纯洁序列为长度len满足\(L \le len \le R\)的序列,纯洁值为某一纯洁序列的平局值,输出所有纯洁序列中最大平均值. 分析: 二 ...
- [USACO12MAR]花盆 二分 单调队列
[USACO12MAR]花盆 二分 单调队列 存在一个长度为\(x\)的区间\([l,r]\),使得区间中最大值与最小值差至少为\(w\),求这个最小的\(x\) \(n\le 100000\),\( ...
- POJ 2018 Best Cow Fences(二分+最大连续子段和)
Best Cow Fences Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14601 Accepted: 4720 Desc ...
- POJ 2018 Best Cow Fences(二分答案)
题目链接:http://poj.org/problem?id=2018 题目给了一些农场,每个农场有一定数量的奶牛,农场依次排列,问选择至少连续排列F个农场的序列,使这些农场的奶牛平均数量最大,求最大 ...
- Best Cow Fences POJ - 2018 (二分)
Farmer John's farm consists of a long row of N (1 <= N <= 100,000)fields. Each field contains ...
- POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)
$ POJ~2018~Best~Cow~ Fences $(二分答案构造新权值) $ solution: $ 题目大意: 给定正整数数列 $ A $ ,求一个平均数最大的长度不小于 $ L $ 的子段 ...
- 2018.09.26洛谷P3957 跳房子(二分+单调队列优化dp)
传送门 表示去年考普及组的时候失了智,现在看来并不是很难啊. 直接二分答案然后单调队列优化dp检验就行了. 注意入队和出队的条件. 代码: #include<bits/stdc++.h> ...
随机推荐
- 用Linq取两个数组的差集
两个数组,取其差集,用Linq做比较方便,效率也比较高,具体如下示例 有两个数组list1 和list2 ,如下 List<int> list1 = new List<int> ...
- Android N 新特性
2016年5月19日,谷歌在美国加州的山景城举办了 Google I/O 开发者大会中发布.2016年6月,Android N正式命名为“牛轧糖” 本届I/O开发者大会上,Google重点介绍了And ...
- ios7 设置status bar风格
How to change status bar style during launch on iOS 7 up vote4down votefavorite When I launch my a ...
- WEB缓存初探
WEB缓存初探 概念理解 缓存--缓存就是数据交换的缓冲区(称作Cache) 缓存 的作用说白了就是用来就近获取东西,比如我们会把已经拿到的常用的东西放在手边(与自己相对较近的地方),方便下次需要时去 ...
- memset函数使用
函数原型 void *memset(void *s,int c,size_t n): 功能 将已开辟内存空间 s 的首 n 个字节的值设为值 c. 头文件 #include<memory.h& ...
- DELPHI XE5轻松输出到MacOsX
配置:MACOSX10.9.3 +XCODE5.1 + VBOX + WINXP + DELPHI XE 5UP2 配置步骤从略. 1.选择firemonkey desktop application ...
- .net 3.5 Lambda表达式
Lambda表达式 转自http://www.cnblogs.com/kingmoon/archive/2011/05/03/2035696.html "Lambda表达式"是一个 ...
- C#调用OCX控件的常用方法[转]
小伙伴们在使用ICP提供的各种能力进行集成开发时常常会遇到一些技术上的困扰,例如ICP中很多接口是通过OCX控件的方式提供的,如何调用这些接口,就成了一个不大不小的问题,毕竟开发指南上可没这些内容啊~ ...
- 「BZOJ 5188」「Usaco2018 Jan」MooTube
题目链接 luogu bzoj \(Describe\) 有一个\(n\)个节点的树,边有权值,定义两个节点之间的距离为两点之间的路径上的最小边权 给你\(Q\)个询问,问你与点\(v\)的距离大于等 ...
- 网页的js源文件被加密解决方案
Firefox和Chrome都具有这个功能,而且位置几乎一致