[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 ...
随机推荐
- ES6初识-函数扩展
默认值 function test(x,y='world'){ console.log('默认值'); } function test2(...arg){ for(let v of arg){ con ...
- pdo->prepare 返回false的问题总结
报错信息: Fatal error: Call to a member function execute() on a non-object 一般是pdo->prepare 返回了false导致 ...
- >题解< 校门外的树
题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是 11 米.我们可以把马路看成一个数轴,马路的一端在数轴 00 的位置,另一端在 LL 的位置:数轴上的每个整数点,即 0,1 ...
- elasticsearch-dsl笔记
一.elasticsearch安装 安装java1.8以上 安装elasticsearch-rtf(https://github.com/medcl/elasticsearch-rtf) head插件 ...
- 网页更换主题以及绘制图形js代码实现
HTML代码实现: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- Linux文件系统与目录结构
在Linux系统中,目录被组织成一个:单根倒置树结构,文件系统从根目录开始,用/来表示.文件名称区分大小写( 大小写敏感还需要看具体的文件系统格式 ),以.开头的为隐藏文件,路径用/来进行分割(win ...
- 汇编:输出寄存器AX中的内容
DATAS segment Temp db '0000H','$' DATAS ends CODES segment START: mov AX,DATAS mov DS,AX ;正式代码开始 mov ...
- PHP的IMAP函数
imap_8bit -转换的8位字符串的引用,打印字符串 imap_alerts -返回所有的I MAP邮件警报已经发生 imap_append -附加了一系列的信息到指定邮箱 imap_base64 ...
- JZOJ 5914. 盟主的忧虑
Description 江湖由 N 个门派(2≤N≤100,000,编号从 1 到 N)组成,这些门派之间有 N-1 条小道将他们连接起来,每条道路都以“尺”为单位去计量,武林盟主发现任何两个 ...
- Python元组,列表,字典,集合
1.元组 元组是有序的,只有index和count两种方法,一看到元组,就提醒是不可更改的 names = ('wll', 'ly', 'jxx', 'syq') (1)index方法 print(n ...