[codeforces] 578C Weakness and Poorness || 三分
原题
题目定义了两个变量:
poorness表示一个区间内和的绝对值。
weakness表示一个所有区间最大的poornesss
题目要求你求一个x使得
a1 − x, a2 − x, ..., an − x这个序列的weakness最小
输出最小的weakness
显然,所求值是这样的一个函数

(因为是对abs取max,所以不可能出现有两个谷的不符合要求的函数)
所以我们可以三分,只有当x为ans时,我们才会得到最小值。
已知x时,如何求解最大子段和呢?,因为我们是取abs,所以在记录b[i]为前缀和时,b[i]为结尾的最大子段和要么由前面最小的b[]得到,要么由前面最大的b[]得到。所以我们只要O(n)前缀和然后枚举判断找答案就可以了。
#include<cstdio>
#include<algorithm>
#include<cmath>
#define N 2000010
#define eps 3e-12
using namespace std;
int n,a[N];
double l,r,b[N];
int read()
{
int ans=0,fu=1;
char j=getchar();
for (;(j<'0' || j>'9') && j!='-';j=getchar()) ;
if (j=='-') fu=-1,j=getchar();
for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';
return ans*fu;
}
double check(double x)
{
double mn=100000,mx=-100000,ans=0;
for (int i=1;i<=n;i++) b[i]=(double)a[i]-x;
for (int i=1;i<=n;i++) b[i]+=b[i-1];
ans=fabs(b[1]),mn=min(0.0,b[1]),mx=max(0.0,b[1]);
for (int i=2;i<=n;i++) {
ans=max(ans,fabs(b[i]-mn));
ans=max(ans,fabs(b[i]-mx));
mn=min(mn,b[i]),mx=max(mx,b[i]);
}
return ans;
}
int main()
{
while (~scanf("%d",&n))
{
for (int i=1;i<=n;i++)
a[i]=read();
l=-100000;
r=100000;
while (r-l>eps)
{
double midl=l+(r-l)/3;
double midr=r-(r-l)/3;
if (check(midl)<check(midr)) r=midr;
else l=midl;
}
printf("%.9lf\n",check(l));
}
return 0;
}
[codeforces] 578C Weakness and Poorness || 三分的更多相关文章
- codeforces 578c - weekness and poorness - 三分
2017-08-27 17:24:07 writer:pprp 题意简述: • Codeforces 578C Weakness and poorness• 给定一个序列A• 一个区间的poornes ...
- codeforces 578c//Weakness and Poorness// Codeforces Round #320 (Div. 1)
题意:一个数组arr,一个数字x,要使arr-x的最大子段最小,问该最小值. 三分x,复杂度logn,内层是最大子段的模板,只能用n复杂度的.因为是绝对值最大,正负各求一次,取大的.精度卡得不得了,要 ...
- Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] C. Weakness and Poorness 三分 dp
C. Weakness and Poorness Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] E. Weakness and Poorness 三分
E. Weakness and Poorness time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- Codeforces E. Weakness and Poorness(三分最大子列和)
题目描述: E. Weakness and Poorness time limit per test 2 seconds memory limit per test 256 megabytes inp ...
- cf578c Weakness and Poorness 三分
其实三分就是一个求单峰函数的最值的东西,用法比较统一.这个题就是观察发现不美好值是一个单峰函数,然后枚举t进行三分就行了. 题干: 给定一个长度为n的数组ai,求一个实数x,使得序列a1-x,a2-x ...
- Codeforces 578.C Weakness and Poorness
C. Weakness and Poorness time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- 【CodeForces】578 C. Weakness and Poorness
[题目]C. Weakness and Poorness [题意]给定含n个整数的序列ai,定义新序列为ai-x,要使新序列的最大子段和绝对值最小,求实数x.n<=2*10^5. [算法]二分| ...
- Weakness and Poorness CodeForces - 578C 三分搜索 (精度!)
You are given a sequence of n integers a1, a2, ..., an. Determine a real number x such that the weak ...
随机推荐
- OA上传和编辑数据
1.VO:value object值对象.通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已.但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要. 2. String[]类型打 ...
- MySQL另类的备份恢复方法——innodb可传输表空间
Preface There're many ways in backing up or migrating data from one server to another one.Lo ...
- datatable 单元格默认文本
在列字段中添加属性:"defaultContent": "-"
- 复用传统C/S架构系统,升级成‘伪’B/S架构设计
应用场景:已经部署了传统系统又想要移动方式的场景.安全性考虑要求高的场景(核心资源要求在企业内部的场景). 我们 做了如下的系统设计: 核心是我们利用了WS做了内外穿透的设计.
- PHP 微信公众号之客服完整讲解
//获取access_token private static function get_access_token($app_id) { $getAuthorizerInfo = wx_auth::g ...
- PTA 7-12(图) 社交网络图中结点的“重要性”计算 最短路
7-12(图) 社交网络图中结点的“重要性”计算 (30 分) 在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来.他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的 ...
- 3-1 练习 HTML 总结
1.段落 #段落 <div class="ui segment"> </div> #翻转 <div class="ui inverted s ...
- oracle(sql)基础篇系列(二)——多表连接查询、子查询、视图
多表连接查询 内连接(inner join) 目的:将多张表中能通过链接谓词或者链接运算符连接起来的数据查询出来. 等值连接(join...on(...=...)) --选出雇员的名字和雇员所在的部门 ...
- laravel5.5http会话机制
1.配置文件 config/session.php 大多数是用file驱动,将session保存在storage/framework/sessions,可以考虑使用redis或者memcached 驱 ...
- UR官网特效
<!DOCTYPE html> <!--申明文档类型:html--> <html lang="en&q ...