思路:lazy标记,每次只记录最后那个数的增量,需要是再向前传递。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
long long int Delta[200005], a[200005];
double sum;
int main(int argc, char const *argv[])
{
int n, type, add, pos, j;
while(~scanf("%d", &n))
{
sum = 0.;
memset(Delta, 0, sizeof(Delta));
a[1] = 0;
j = 1;
for(int i = 0; i < n;i ++)
{
scanf("%d", &type);
if(type == 1)
{
scanf("%d%d", &pos, &add);
Delta[pos] += add;
sum += add*pos;
}
else if(type == 2)
{
scanf("%d", &add);
a[++j] = add;
sum += add;
}
else
{
sum -= a[j] + Delta[j];
Delta[j-1] += Delta[j];
Delta[j--] = 0;
}
printf("%.7lf\n", sum/j);
}
}
return 0;
}