题解

若存在一个子集s满足答案的话,则该子集一定包含集合S的最大值。
反证法证明:
假设s集合中最大的元素为x,S集合中最大的元素为X。则如果把x换成X,最大值增加了X-x,而平均值增量一定不大于X-x。
这样的话,确定了最大值,s中剩下的数一定从集合S中从小到大依次选取,
而存在一个事实:我们通过不断向集合s中添加元素,集合s的平均值会先减小,后增大。
这个事实可以这样理解:集合s一开始只有X,平均值为X,增加一个元素a1a_1a1​的时候,平均值为mean=(X+a1)/2mean=(X+a_1)/2mean=(X+a1​)/2,变小了,而如果下一个选的元素a2a_2a2​小于mean,那么平均值将变小,否则将变大。由于aia_iai​总是递增的,所以mean会先变小后变大。
分析到这里,我们可以得到mean的变化是一个凸函数,可以用三分法求极值点。这样就做完了。
Notice:这个题有一个特殊的性质,那就是决策点是单调递增的,直接暴力求解就可以了,用不上三分。
那么为什么决策点是单调递增的呢?因为最大值是不会变小的的,所以决策点不会变小,仔细思考一下。


代码

上一份三分做的代码

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
const double inf = 1e18;
int Q;
int cnt = 0;
ll sum[1000000];
double check(int mid,ll x){return double(sum[mid]+x)/double(mid+1);
}
int main(){cin>>Q;while(Q--){int tp;scanf("%d",&tp);double ans;if(tp == 1){ll x;scanf("%lld",&x);++cnt;sum[cnt] = sum[cnt-1] + x;int l = 0,r = cnt-1,mid,mmid;double mean = inf,tmp;while(r - l > 2){mid = (l+r)/2;mmid = (mid+r)/2;if(check(mid,x) > check(mmid,x)) l = mid;else r = mmid;}double t = min(min(check(l,x),check(r,x)),check((l+r)/2,x));ans = x - t;}else{printf("%.10lf\n",ans);}}}

codefoces 939E Maximize!好题相关推荐

  1. 2018.12.08 codeforces 939E. Maximize!(二分答案)

    传送门 二分答案好题. 题意简述:要求支持动态在一个数列队尾加入一个新的数(保证数列单增),查询所有子数列的 最大值减平均值 的最大值. 然而网上一堆高人是用三分做的. 我们先考虑当前的答案有可能由什 ...

  2. CodeForces - 939E Maximize! [尺取法]

    题意:定义一个multiset,每次有两个操作,一个是插入一个大于当前集合已经有的数的数,二是询问集合中的子集和 max-mean的最大值(mean是平均数). 题解:因为每次加入的肯定是最大的,所以 ...

  3. Codeforces 题目合集+分类+代码 【Updating...】【361 in total】

    961A - Tetris                                                模拟                                      ...

  4. Java实现选最远距离的座位_LeetCode算法题-Maximize Distance to Closest Person(Java实现)...

    这是悦乐书的第328次更新,第351篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第198题(顺位题号是849).在一排座位中,1表示一个人坐在该座位上,0表示座位是空的 ...

  5. C#LeetCode刷题之#849-到最近的人的最大距离(Maximize Distance to Closest Person)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3754 访问. 在一排座位( seats)中,1 代表有人坐在座位 ...

  6. codefoces 1072 D Minimum path dp+bfs (zls一眼题

    CF 1072 D 题意 给你一个n*n的矩阵然后给你k代表能替换k次 然后从 (1,1)走向(n,n) 蒟蒻不会 一旁的zls看了一眼觉得我们要dp 但是dp不能记录答案路径 于是我们觉得预处理dp ...

  7. 2016 ACM / ICPC Asia dalian Regional Contest 题解(11 / 11)【每日亿题2021 / 2 / 17】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A .(2017 ACM ICPC dalian H)To begin or not to be ...

  8. 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2017 ICPC shenyang I)Little Boxes B.(2017 ICP ...

  9. 你面试稳了!通关LeetCode刷题完整攻略,省时又高效

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:穷码农 来源:https://zhuanlan.zhihu.com/p/10 ...

最新文章

  1. 汗!雅虎中国个人空间
  2. 在学习django的时候
  3. File Transfer(并查集)
  4. VMware / 三种联网方法及原理
  5. matlab库存点仿真教程,基于MATLABSimulink库存系统建模与仿真.doc
  6. 资源下载】512页《神经网络与深度学习》(附下载链接)
  7. 设计师必备超人气设计素材网站
  8. 第一个linux驱动程序
  9. Linux下类似美图秀秀的软件,美图秀秀在Deepin下能用到Linux版、网页版及Wine版
  10. 学习Python的pyecharts的过程中踩到的一些坑
  11. oracle存储过程执行中输出日志文件 (转载学习)
  12. C++ Primer Message和Folder类
  13. c语言多线程编程随机数,在c 中使用线程安全的随机数,多线程_c_开发99编程知识库...
  14. SqlServer中的dbo是什么意思?
  15. 囚徒困境(条件判断)
  16. 2007年新兴网络服务
  17. 忘记PPT密码怎么办?附解决办法
  18. 函数在任意三角区域二重积分的计算
  19. 账龄分析核对的操作步骤,解决客户不会核对账龄与业务明细的问题
  20. python中input()函数的返回是什么类型_Python中input函数的用法是什么?

热门文章

  1. java怎么将前端的数据存到关联的表中_Java程序员最可能被考到的14个面试题
  2. php 如何生成exe文件怎么打开,如何把PHP转成EXE文件
  3. java web编写计算器_javaWeb 使用 jsp 和 javaBean 实现计算器功能
  4. [C++STL]仿函数用法介绍
  5. [PAT乙级]1023 组个最小数
  6. 蓝桥杯真题-连号区间数-枚举
  7. C++string容器-子串获取
  8. Max Sum Plus Plus HDU - 1024(动态规划求最大M子段和)
  9. 深圳本次核酸检普筛怎么将个人信息和结果对应上??
  10. F - Sugoroku2(动态规划)