CF939E:Maximize! ——题解
http://codeforces.com/problemset/problem/939/E
https://vjudge.net/problem/CodeForces-939E
给一个集合,每次两个操作:
1 a:将一个大于集合所有数的a添加进集合。
2:查询集合中所有子集的最大值-平均值的最大值。
有一个结论:最大值所在的子集一定包含集合最大值,我们用感性证明证明一下。
我们假设结论为假,那么我们已经选定了一个子集,设其最大值为x,我们在集合里还有一个数为x+1,则如果将x换成x+1,平均值只会加上一个小于1的数,而最大值却加1,显然要比原先的值大,所以x+1更优。
同理x与x+2比较可以看成x+1与x+2比较,以此类推。
所以结论必为真。
那么既然我们能固定一个最大值,我们还有一个显然成立的结论,就是子集一定为最小的前k个数和最大的数x构成。因为太显然了就不证了。
既然这样,那么显然答案是一个单峰函数,可以三分求解。
(第一次碰这个题的时候前几个步骤都想到了三分愣是没想到……我是真的蠢,看样子题刷少了)
#include<cstdio>
#include<algorithm>
using namespace std;
typedef double dl;
typedef long long ll;
const int Q=5e5+;
ll sum[Q],maxx;
int len=;
inline dl suan(int k){
return 1.0*(maxx*k-sum[k])/(k+);
}
dl sanfen(int l,int r){
int mid1,mid2;
while(l<=r){
if(r-l<){
dl ans=suan(r);
for(int i=l;i<r;i++)ans=max(ans,suan(i));
return ans;
}
mid1=l+(r-l)/,mid2=mid1+(r-l)/;
if(suan(mid1)>suan(mid2))r=mid2;
else l=mid1;
}
}
int main(){
int q,op;
scanf("%d",&q);
while(q--){
scanf("%d",&op);
if(op==){
scanf("%lld",&maxx);
sum[++len]=sum[len-]+maxx;
}
else printf("%.10lf\n",sanfen(,len-));
}
return ;
}
+++++++++++++++++++++++++++++++++++++++++++
+本文作者:luyouqi233。 +
+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+
+++++++++++++++++++++++++++++++++++++++++++
CF939E:Maximize! ——题解的更多相关文章
- CF1139E Maximize Mex 题解【二分图】
		
我发现我有道叫[SCOI2010]连续攻击游戏的题白写了.. Description There are \(n\) students and \(m\) clubs in a college. Th ...
 - 2017 google Round C APAC Test 题解
		
题解参考网上的答案,以及我自己的想法. 主要参考网站:http://codeforces.com/blog/entry/47181,http://codeforces.com/blog/entry/4 ...
 - 洛谷P2891 Dining P1402 酒店之王【类二分图匹配】题解+代码
		
洛谷P2891 Dining P1402 酒店之王[类二分图匹配]题解+代码 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的 ...
 - 2016 Multi-University Training Contest 2题解报告
		
A - Acperience HDU - 5734 题意: 给你一个加权向量,需要我们找到一个二进制向量和一个比例因子α,使得|W-αB|的平方最小,而B的取值为+1,-1,我们首先可以想到α为输入数 ...
 - Codeforces Round #469 Div. 2题解
		
A. Left-handers, Right-handers and Ambidexters time limit per test 1 second memory limit per test 25 ...
 - Codeforces Round #468 Div. 2题解
		
A. Friends Meeting time limit per test 1 second memory limit per test 256 megabytes input standard i ...
 - CodeForces 939E Maximize
		
Maximize 题意:整个程序有2种操作,操作1将一个元素放入集合S中,且保证最新插入的元素不小于上一次的元素, 操作2 找到集合S中的某个子集合, 使得 集合中最大的元素减去平均数的值最大. 题解 ...
 - CF 1132A,1132B,1132C,1132D,1132E,1132F(Round 61 A,B,C,D,E,F)题解
		
A.Regular bracket sequence A string is called bracket sequence if it does not contain any characters ...
 - Codeforces Round #436 (Div. 2) 题解864A 864B 864C 864D 864E 864F
		
A. Fair Game time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
 
随机推荐
- react-native android 初始化问题
			
最近开始接触rn,官方起手,装了一堆工具,然后启动项目的时候出现了一堆问题,这里针对我遇到的一些问题提供一些解决方案. 本人开发环境mac,在启动ios的时候没啥大问题,可以直接启动,这里提示一点,因 ...
 - debian8+lnmp1.2一键安装+WordPress3.9
			
下载并安装LNMP一键安装包 wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz && tar zxf lnmp1.2-ful ...
 - 用python读取配置文件config.ini
			
还在学习中...写的有点凌乱 感觉还是应该先学会读取配置文件才行,把一些经常需要修改的但是又经常需要用到的参数放到配置文件中方便使用(我是这么觉得的) 首先是config.ini的存放位置,我们把它放 ...
 - Linux命令应用大词典-第28章 硬件管理
			
28.1 lscpu:显示有关CPU架构的信息 28.2 nproc:显示当前进程可用的CPU数目 28.3 chcpu:配置CPU
 - 了解Python控制流语句——break 语句
			
这篇文章主要介绍了详解Python中break语句的用法,是Python入门的呼出知识,需要的朋友可以参考下,python基础系列教程之-Python break语句 跳出循环 break 语句用以中 ...
 - 交换学生 (Foreign Exchange,UVa10763)
			
题目描述: 解题思路: 开一个数组,读入一次交换两个数,如果最后数组不变,即符合匹配 #include<iostream> #include<cstdio> #include& ...
 - 浅谈JS-cookie,你是香甜可口的小点心吗?
			
引言: 想必大家一定听过或看过浏览器cookie,早在nokia雄霸天下.我们还不太明白浏览器的时候,cookie就已经悄悄地存在于浏览器的“设置选项”中了.当时它的用途仅仅是让你选择是否“清除”.年 ...
 - leetcode个人题解——#17 Letter Combinations of a Phone Number
			
思路:用深搜遍历九宫格字符串,一开始做的时候发生了引用指向空地址的问题,后来发现是vector不能直接=赋值. class Solution { public: int len; ]={"a ...
 - Linux error:No space left on device
			
一台Oracle数据库服务器在关机重启后,Oracle监听无法启动,提示错误 Linux error:no space left on device 提示可知:问题是出在磁盘空间不足 但是初步查看分区 ...
 - POJ 2986 A Triangle and a Circle(三角形和圆形求交)
			
Description Given one triangle and one circle in the plane. Your task is to calculate the common are ...