首 先 最 大 的 数 肯 定 要 选 首先最大的数肯定要选 首先最大的数肯定要选
然 后 就 选 一 些 小 的 数 然后就选一些小的数 然后就选一些小的数
开 始 选 最 小 的 数 平 均 值 肯 定 下 降 开始选最小的数平均值肯定下降 开始选最小的数平均值肯定下降
选 到 后 面 比 较 大 的 数 平 均 值 会 上 升 选到后面比较大的数平均值会上升 选到后面比较大的数平均值会上升
所 以 可 以 用 三 分 求 极 值 所以可以用三分求极值 所以可以用三分求极值
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=5e5+10;
ll n,a[maxn],pre[maxn],top;
double calc(int x){
return (pre[x]+a[top])*1.0/(x*1.0+1.0);
}
int main()
{
cin >> n;
while(n--)
{
ll ok,x;
scanf("%lld",&ok);
if(ok==2)
{
int l=1,r=top-1;
double ans=0;
while(r>=l)
{
int mid1=(r-l)/3+l,mid2=r-(r-l)/3;
double q=calc(mid1),w=calc(mid2);
if(q>w) l=mid1+1,ans=max(ans,a[top]-w);
else r=mid2-1,ans=max(ans,a[top]-q);
}
printf("%.10lf\n",ans);
}
else
{
scanf("%lld",&x);
a[++top]=x,pre[top]=pre[top-1]+x;
}
}
}