fork download
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<algorithm>
  7. #include<map>
  8. #include<vector>
  9. #include<deque>
  10. using namespace std;
  11. int lazy[1000000]={0};
  12. int ext[1000000]={0};
  13. int findLast(int n,int end){
  14. int last=ext[n];
  15. for(int i=n;i<=end;i++){
  16. last+=lazy[i];
  17. }
  18. return last;
  19. }
  20. int main(){
  21. int n;
  22. int t,a,k,x;
  23. int longest=1;
  24. int numCount=1;
  25. double sum=0,last=0;
  26. double avg;
  27. cin>>n;
  28. while(n--){
  29. cin>>t;
  30. if(t==1){
  31. cin>>a>>x;
  32. longest=max(longest,a);
  33. if(a==numCount)last+=x;
  34. lazy[a]+=x;
  35. //cout<<lazy[a]<<" lazy updated\n";
  36. sum+=(x*a);
  37. avg=(sum*1.0)/(numCount);
  38. }else if(t==2){
  39. cin>>k;
  40. last=k;
  41. sum+=k;
  42. numCount++;
  43. ext[numCount]+=k;
  44. //cout<<ext[numCount]<<" ext updated\n";
  45. //cout<<sum<<" "<<numCount<<endl;
  46. avg=(sum*1.0)/numCount;
  47. }else if(t==3){
  48. sum-=last;
  49. //cout<<"lazy is : "<<lazy[(int)numCount]<<endl;
  50. if(ext[numCount]){
  51. ext[numCount]=0;
  52. }
  53. numCount--;
  54. //cout<<numCount<<" "<<longest<<endl;
  55. last=findLast(numCount,longest);
  56. // cout<<"last: "<<last<<endl;
  57. avg=(sum*1.0)/numCount;
  58. }
  59. printf("%0.6lF\n",avg);
  60. }
  61. return 0;
  62. }
Success #stdin #stdout 0s 10712KB
stdin
5
2 1
3
2 3
2 1
3
stdout
0.500000
0.000000
1.500000
1.333333
1.500000