ZROI2018普转提day1t1
分析
我们先二分一下最终的平均值mid,然后让序列中的每一个数都减去这个mid,之后用新序列的前缀和建一棵线段树,枚举起点i,然后求出此时在i+L-1~i+R-1范围内的前缀和的最大值,用这个数减去pre[i],这就是以i为起点的长度为L~R范围内的序列最大值。如果这个值大于0则表示这个mid是可以达成的。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
const double ep = 0.00001;
int n,L,R;
double a[],b[],d[],sum[];
inline void build(int le,int ri,int wh){
if(le==ri){
d[wh]=sum[le];
return;
}
int mid=(le+ri)>>;
build(le,mid,wh<<);
build(mid+,ri,wh<<|);
d[wh]=max(d[wh<<],d[wh<<|]);
return;
}
inline double q(int le,int ri,int x,int y,int wh){
if(le>=x&&ri<=y)return d[wh];
int mid=(le+ri)>>;
double ans=-1e18;
if(mid>=x)ans=max(ans,q(le,mid,x,y,wh<<));
if(mid<y)ans=max(ans,q(mid+,ri,x,y,wh<<|));
return ans;
}
inline bool ck(double mid){
for(int i=;i<=n;i++)
b[i]=a[i]-mid;
sum[]=;
for(int i=;i<=n;i++)
sum[i]=sum[i-]+b[i];
build(,n,);
for(int i=;i<=n-L+;i++)
if(q(,n,i+L-,min(n,i+R-),)>=sum[i-])return ;
return ;
}
int main(){
double le=ep,ri=;
scanf("%d%d%d",&n,&L,&R);
for(int i=;i<=n;i++){
scanf("%lf",&a[i]);
if(a[i]>ri)ri=a[i];
}
ri+=ep;
while(ri-le>ep){
double mid=(le+ri)/;
if(ck(mid))le=mid;
else ri=mid;
}
printf("%0.4lf\n",le);
return ;
}
ZROI2018普转提day1t1的更多相关文章
- ZROI2018普转提day6t1
传送门 分析 记录区间最大值,线段树上二分找比这个点大的最靠前位置即可 代码 #include<iostream> #include<cstdio> #include<c ...
- ZROI2018普转提day6t3
传送门 分析 居然卡哈希数,万恶的出题人...... 感觉我这个方法似乎比较呆,我的代码成功成为了全网最慢的代码qwq 应该是可以直接哈希的 但由于我哈希学的不好又想练练线段树维护哈希,于是就写了个线 ...
- ZROI2018普转提day7t1
传送门 分析 一道有意思的小题... 我们发现如果$(1,1)$为白色,则将其变为白色需要偶数次操作,而如果为黑色则需要奇数次操作 我们知道要让A赢需要奇数次操作,所以我们只需要判断$(1,1)$的颜 ...
- ZROI2018普转提day7t2
传送门 分析 首先我们不难想到我们一定可以将每一个点分开算,然后看这个点被几个矩形包含 于是对于位置为$(i,j)$的点它被包含的次数为$i * (n-i+1) * j * (m-j+1)$ 这个式子 ...
- ZROI2018普转提day1t4
传送门 分析 就是飞飞侠这道题...... 我们可以将这张图建成好几层,每一层可以向下一层的上下左右无代价移动,而对于每个点如果付b[i][j]的代价就可以走到比它高a[i][j]的层上.我们用这种方 ...
- ZROI2018普转提day2t4
传送门 分析 考场上暴力水过好评... 然后我的st表查询似乎是log的,然后log三方跑的比log方快,qwq. 我们发现如果一个区间的最小值就是这个区间的gcd,则这个区间合法.所以我们二分区间长 ...
- ZROI2018普转提day2t2
传送门 分析 我们发现2R+C实际就相当于R行C列的子集的个数.因此我们可以将所有集合的子集个数转换为每个集合属于的集合的个数.所以我们可以求出: 这个式子的意义为对于选i行j列的情况的所有方案乘上i ...
- ZROI2018普转提day2t1
传送门 分析 我们通过仔细研究不难发现对于一次交换(i,i+1)的操作之后,在i之前的点就不可能跑到i之后,i+1之后的的点也不可能跑到i+1之前,所以这个序列在一次交换之后就相当于被分成了两个部分. ...
- ZROI2018普转提day2t3
传送门 分析 考试的时候sb了......我们发现可以按照先序遍历将一棵树变成一个序列,而不需要删的数的数量便是最长上升子序列的长度,但是还有一个问题就是如果在5和7之间有3个空的位置就无法填入合法的 ...
随机推荐
- nyoj-952-最大四边形 (向量叉乘)
题目链接 /* Name:nyoj-952-最大四边形 Copyright: Author: Date: 2018/4/27 10:46:24 Description: 枚举一条对角线,再选择一个 看 ...
- git公私钥的拷贝
1.场景 由于我换了一台电脑,为了能访问远程仓库,我就把原来电脑上的私钥和config文件拷贝过来 2.出现问题及解决方案 git clone server:xxx_service_express 报 ...
- poj3268 Silver Cow Party (SPFA求最短路)
其实还是从一个x点出发到所有点的最短路问题.来和回只需分别处理一下逆图和原图,两次SPFA就行了. #include<iostream> #include<cstdio> #i ...
- Android源代码因删除所有git仓库导致的编译错误
/******************************************************************************** * Android源代码因删除所有g ...
- 真机环境spotlight光源丢失
maya做好的模型生成的fbx,导入到unity之后,pc运行正常,到了ios真机上发现光线丢失,场景内物体都是暗暗的,查出来原因是spot光源丢失了,选中spot光源,在其Render Mode里, ...
- PHPExcel如何把该列的值设置为文本无科学计数?
$obj_sheet->setCellValueExplicit($cells[$_counter].$i, (isset($val[$_value_key]) ...
- HTTP-Runoob:HTTP请求头信息
ylbtech-HTTP-Runoob:HTTP请求头信息 1.返回顶部 1. HTTP 响应头信息 HTTP请求头提供了关于请求,响应或者其他的发送实体的信息. 在本章节中我们将具体来介绍HTTP响 ...
- PostgreSQL 管理数据库
管理数据库每个正在运行的PostgreSQL 服务器实例都管理着一个或多个数据库.因此,在组织SQL对象(“数据库对象”)的层次中,数据库位于最顶层. 本章描述数据库的属性,以及如何创建.管理.删除它 ...
- Jlink flash 烧录HEX 程序
一般Jlink版本 和 Jag(硬件)最好匹配 安装Jlink 时,IAR的工具包也可以顺带安装. 有源码: IAR 可以自动选择CPU型号,代码直接Download and debug https: ...
- STL容器迭代器失效问题讨论
STL源码剖析---迭代器失效小结 vector迭代器的几种失效的情况: .当插入(push_back)一个元素后,end操作返回的迭代器肯定失效. .当插入(push_back)一个元素后,capa ...