Codeforces Round #464 (Div. 2) E. Maximize!
题目链接:http://codeforces.com/contest/939/problem/E
E. Maximize!
time limit per test3 seconds
memory limit per test256 megabytes
Problem Description
You are given a multiset S consisting of positive integers (initially empty). There are two kind of queries:
Add a positive integer to S, the newly added integer is not less than any number in it.
Find a subset s of the set S such that the value is maximum possible. Here max(s) means maximum value of elements in s, — the average value of numbers in s. Output this maximum possible value of .
Input
The first line contains a single integer Q (1 ≤ Q ≤ 5·105) — the number of queries.
Each of the next Q lines contains a description of query. For queries of type 1 two integers 1 and x are given, where x (1 ≤ x ≤ 109) is a number that you should add to S. It’s guaranteed that x is not less than any number in S. For queries of type 2, a single integer 2 is given.
It’s guaranteed that the first query has type 1, i. e. S is not empty when a query of type 2 comes.
Output
Output the answer for each query of the second type in the order these queries are given in input. Each number should be printed in separate line.
Your answer is considered correct, if each of your answers has absolute or relative error not greater than 10 - 6.
Formally, let your answer be a, and the jury’s answer be b. Your answer is considered correct if .
Examples
input
6
1 3
2
1 4
2
1 8
2
output
0.0000000000
0.5000000000
3.0000000000
input
4
1 1
1 4
1 5
2
output
2.0000000000
解题心得:
- 题意就是给你n次询问,每次有两种情况,第一种,在一个集合中插入一个不小于集合中任意数的数,第二种就是在集合中选一个子集出来,要求子集的最大值减去子集的平均值最大,输出这个最大值。
- 首先有个贪心的思想,要想最大值减去平均值最大,那么最大值要尽可能的大(尝试一下会发现符合要求的子集中必然包含最大值,也比较容易想明白),然后要平均值尽可能的小,那么假设先选一个子集出来,算出平均值,如果集合中还有比平均值更小的数,那么必然可以将这个数加入子集中拉小平均值。
- 因为插入的数是越来越大的,所以形成的数列是升序,那么在找最小的平均值的时候就可以二分查找,先求出前缀和,每次寻找一个点,看这个点的前缀和算出的平均值是否比下一个数更大。以此来进行二分查找。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6;
ll sum[maxn];
vector <int> ve;
int n;
void get_ans(){
int l = 0,r = ve.size()-2,mid;
double ave;//平均值
while(l < r){
mid = (l + r)/2;
ave = (double )(ve[ve.size()-1] + sum[mid])/(double )(mid+2);
if(ave > ve[mid+1])
l = mid+1;
else
r = mid;
}
ave = (double)(sum[l]+ve[ve.size()-1])/(l+2);
double ans = ve[ve.size()-1] - ave;
printf("%.9f\n",ans);//注意一下精度问题
}
int main(){
scanf("%d",&n);
while(n--){
int a,b;
scanf("%d",&a);
if(a == 1){
scanf("%d",&b);
ve.push_back(b);
sum[ve.size()-1] = sum[ve.size()-2]+b;//得出前缀和
}
else
get_ans();
}
return 0;
}
Codeforces Round #464 (Div. 2) E. Maximize!的更多相关文章
- Codeforces Round #464 (Div. 2) D. Love Rescue
D. Love Rescue time limit per test2 seconds memory limit per test256 megabytes Problem Description V ...
- Codeforces Round #464 (Div. 2) C. Convenient For Everybody
C. Convenient For Everybody time limit per test2 seconds memory limit per test256 megabytes Problem ...
- Codeforces Round #464 (Div. 2) B. Hamster Farm
B. Hamster Farm time limit per test2 seconds memory limit per test256 megabytes Problem Description ...
- Codeforces Round #464 (Div. 2) A Determined Cleanup
A. Love Triangle time limit per test1 second memory limit per test256 megabytes Problem Description ...
- Codeforces Round #464 (Div. 2) B. Hamster Farm[盒子装仓鼠/余数]
B. Hamster Farm time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- Codeforces Round #464 (Div. 2) A. Love Triangle[判断是否存在三角恋]
A. Love Triangle time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- Codeforces Round #464 (Div. 2)
A. Love Triangle time limit per test: 1 second memory limit per test: 256 megabytes input: standard ...
- Codeforces Round #464 (Div. 2) D题【最小生成树】
Valya and Tolya are an ideal pair, but they quarrel sometimes. Recently, Valya took offense at her b ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
随机推荐
- 全栈工程师,也叫全端工程师,英文FullStackdevelopver。是指掌握多种技能,并能利用多种技能独立完成产品的人。
全栈工程师的发展 在系统全面的大公司,全栈工程师并没有一个稳定的发展职位.我无比赞同知乎那个帖子里面这样的一句话: 一个真正的全栈工程师,目标只有一个:创业. 听起来有些悲凉,但事实就是如此.任何一个 ...
- ElasticSearch安装(以Docker的方式)
拉取docker镜像: docker pull docker.elastic.co/elasticsearch/elasticsearch:6.1.1 命令行方式启动 测试环境 :docker ...
- ajax实现异步请求的过程
var xhr; xhr = new XMLHttpRequest(); //创建一个异步对象 xhr.open("Get", "test.a ...
- vc++ 6.0编译后生成的文件
程序在编译后,在目标路径下会生成多个文件 Debug文件夹(*.exe,*.ilk,*.obj,*.pch,*.pdb,*.idb,*,pdb),*.cpp,*.dsp,*.ncb,*.plg ...
- UGUI的事件系统分析
UGUI的源码还是非常清晰的,打开源码可以发现, 从UGUI的源码可知:在EventSystem中调用每一帧函数来实现: private void TickModules() { for (var i ...
- 9.26<立方网>技术笔试题
该公司题目感觉不难,算法设计有三道大题. 1.设有m和n两个整数,求它们的最大公约数和最小公倍数. 2.猴子分桃问题,每次分桃多一个,共有五个猴子,问最少有多少个桃子. 3.关于java的题目,有A, ...
- Jscript 命名规范
变量命名都以类型前缀+有意义的单词组成,用驼峰式命名法增加变量和函式的可读性.例如:sUserName,nCount. 前缀规范:每个局部变量都需要有一个类型前缀,按照类型可以分为:s:表示字符串.例 ...
- 「转」sqlalchemy 0.9.8 多对多级联删除
转自知乎 http://www.zhihu.com/question/21050551 有 A,B,C,AB,AC五张表 class A(base): __tablename__ = "a& ...
- cms-框架搭建
1.web.xml中的配置,在配置中主要有: 1.1.过滤器: 1.1.1:shiro权限过滤器 1.1.2:字符编码过滤器 1.2.监听器: 1.2.1:spring监听器 1.3.servlet ...
- TTTAttributedLabel
TTTAttributedLabel 库地址 https://github.com/TTTAttributedLabel/TTTAttributedLabel #import "ViewCo ...