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 ...
随机推荐
- mybatis持久化操作“无效的类型111解决”
mybatis持久化操作时,如果插入数据为null的情况下,由于内部机制问题,会导致报错,导致出现:“无效的类型:1111”示例如下: org.springframework.jdbc.Uncateg ...
- <linux下extmail服务的搭建>
下载2个软件包: extmail-1.1.0.tar.gz extman-1.1.tar.gz 下载地址:http://www.cpan.org/ 创建extsuite目录 mkdir /va ...
- Rspec基本语法
引用链接:http://reverocean.iteye.com/blog/1489957 1. describe和context describe和context方法用来组织相关的行为example ...
- 面向对象(OOP)三
一.面向对象基础原则 1)单一职责原则(类要写得小而精,低耦合) 内部类 单列模式 对于单一职责原则,其核心思想为:一个类,最好只做一件事,只有一个引起它的变化.单一职责原则可以看做是低耦合.高内聚在 ...
- Vue.js(2.x)之插值
看了一些友邻写的文章,不少是基于1.0版本的,有些东西在2.x版本应该已经废除了(如属性插值.单次插值在2.x版本上运行根本不执行).对于不理解的东东,找起资料来就更麻烦了.不得不老老实实线下测试并整 ...
- 不该被忽视的CoreJava细节(一)
一.系列文章导言 <不该被忽视的CoreJava细节>系列文章将会持续更新.我希望自己通过这一系列文章的写作,能与读者一起进步,逐步完善对Java体系结构的了解. 二.本期关注点 几乎翻看 ...
- Python3基础12(collections、struct、itertools、chardet等的使用)
import struct import base64import itertoolsimport chardet from collections import namedtuple,default ...
- mybatis-动态sql1
在多条件查询的情况下必须用到动态sql 沿用之前的项目 1.在dao中添加多添件查询方法 package com.java1234.mappers; import java.util.List;imp ...
- 【server 安全】更改本地安全策略及禁用部分服务以进一步增强windows server的安全性
本地安全策略 以上内容的备份 注册表路径: System\CurrentControlSet\Control\ProductOptionsSystem\CurrentControlSet\Contro ...
- WORD窗体保护密码清除
Word 2003破解方法如下:1.用Word打开已设置有密码的“保护文档”(原始DOC文件):2.菜单中选择“文件”→“另存为Web页”,保存为HTML文件然后关闭Word:3.用文本编辑器(如:记 ...