题目链接: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


解题心得:

  1. 题意就是给你n次询问,每次有两种情况,第一种,在一个集合中插入一个不小于集合中任意数的数,第二种就是在集合中选一个子集出来,要求子集的最大值减去子集的平均值最大,输出这个最大值。
  2. 首先有个贪心的思想,要想最大值减去平均值最大,那么最大值要尽可能的大(尝试一下会发现符合要求的子集中必然包含最大值,也比较容易想明白),然后要平均值尽可能的小,那么假设先选一个子集出来,算出平均值,如果集合中还有比平均值更小的数,那么必然可以将这个数加入子集中拉小平均值。
  3. 因为插入的数是越来越大的,所以形成的数列是升序,那么在找最小的平均值的时候就可以二分查找,先求出前缀和,每次寻找一个点,看这个点的前缀和算出的平均值是否比下一个数更大。以此来进行二分查找。

#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!的更多相关文章

  1. Codeforces Round #464 (Div. 2) D. Love Rescue

    D. Love Rescue time limit per test2 seconds memory limit per test256 megabytes Problem Description V ...

  2. Codeforces Round #464 (Div. 2) C. Convenient For Everybody

    C. Convenient For Everybody time limit per test2 seconds memory limit per test256 megabytes Problem ...

  3. Codeforces Round #464 (Div. 2) B. Hamster Farm

    B. Hamster Farm time limit per test2 seconds memory limit per test256 megabytes Problem Description ...

  4. Codeforces Round #464 (Div. 2) A Determined Cleanup

    A. Love Triangle time limit per test1 second memory limit per test256 megabytes Problem Description ...

  5. 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 ...

  6. 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 ...

  7. Codeforces Round #464 (Div. 2)

    A. Love Triangle time limit per test: 1 second memory limit per test: 256 megabytes input: standard ...

  8. Codeforces Round #464 (Div. 2) D题【最小生成树】

    Valya and Tolya are an ideal pair, but they quarrel sometimes. Recently, Valya took offense at her b ...

  9. 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 ...

随机推荐

  1. Java BIO

    目录 BIO 字节流 OutputStream InputStream 字符流 Reader Writer 转换流 InputStreamReader OutputStreamWriter BIO I ...

  2. Composition or inheritance for delegating page methods?

    引用链接:http://watirmelon.com/2011/01/24/composition-or-inheritance-for-delegating-page-methods/ Compos ...

  3. ios Lable 添加删除线

    遇到坑了: NSString *goodsPrice = @"230.39"; NSString *marketPrice = @"299.99"; NSStr ...

  4. springcloud中servcie层调用fegin异常以及异步方法的实现

    近日在做业务上的短信推送和APP消息推送,通过调用别的模块的接口来实现,在springcloud中通过fegin进行调用.这里要说明的事情并不是如何开发推送功能,而是在调试过程中碰到的一些小问题.我把 ...

  5. iOS - 毛玻璃动画效果

    声明全局变量 #define kMainBoundsHeight ([UIScreen mainScreen].bounds).size.height //屏幕的高度 #define kMainBou ...

  6. 在数据绑定控件(如:Repeater)中使用if判断

    方法: target="<%# DataBinder.Eval(Container.DataItem, "数据库字段").ToString() == "t ...

  7. LeetCode Valid Parentheses 有效括号

    class Solution { public: void push(char c){ //插入结点 struct node *n=new struct node; n->nex=; n-> ...

  8. HDU3308 线段树区间合并

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 ,简单的线段树区间合并. 线段树的区间合并:一般是要求求最长连续区间,在PushUp()函数中实 ...

  9. 测试发布(maven-assembly-plugin看好你哦)

    项目改成了maven管理,现场需要用增量补丁包的形式发布代码: 2015/4/21 以前试过用ant打补丁包,现在试试maven能不能做同样的事情: maven-assembly-plugin看着可以 ...

  10. IOS 当一个控件被添加到父控件中会调用(didMoveToSuperview)

    /** * 当一个控件被添加到父控件中就会调用 */ - (void)didMoveToSuperview { if (self.group.opened) { self.nameView.image ...