博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【51NOD】数据流中的算法
阅读量:6228 次
发布时间:2019-06-21

本文共 1429 字,大约阅读时间需要 4 分钟。

【算法】数学

【题解】

1.平均数:累加前缀和。//听说要向下取整?

2.中位数:双堆法,大于中位数存入小顶堆,小于中位数存入大顶堆,保证小顶堆内数字数量≥大顶堆,奇数则取小堆顶,偶数则取两堆顶/2。

3.方差=(平方的均值)-(均值的平方),即对于a,b,c,s2=(a2+b2+c2)/3-((a+b+c)/3)2

#include
#include
#include
#include
#include
using namespace std;const int maxn=1000010;multiset
q2;//小顶堆 struct cmp{ bool operator() (const int a,const int b)const { return a>b;}};multiset
q1;//大顶堆 int n,k,a[maxn],sum[maxn],tot1,tot2;long long sums[maxn];double ans2;int read(){ char c;int s=0,t=1; while(!isdigit(c=getchar()))if(c=='-')t=-1; do{s=s*10+c-'0';}while(isdigit(c=getchar())); return s*t;}void compair(){ if(tot1>tot2) { int now=*q1.begin();tot1--;//????????? q1.erase(q1.begin());//一定要删除指定位置,删除multiset中的键值会把全部键值等于的都删掉。 q2.insert(now);tot2++; } if(tot2-1>tot1) { int now=*q2.begin();tot2--; q2.erase(q2.begin()); q1.insert(now);tot1++; } if((tot1+tot2)%2) ans2=*q2.begin(); else ans2=1.0*(*q1.begin()+*q2.begin())/2;}int main(){ n=read(),k=read(); sum[0]=0;sums[0]=0; int tot=0,task=0; for(int i=1;i<=n;i++) { task=read(); if(task==1) { tot++; a[tot]=read(); if(tot>k) { if(a[tot-k]
=ans2)q2.insert(a[tot]),tot2++; else q1.insert(a[tot]),tot1++; compair(); sums[tot]=sums[tot-1]+a[tot]*a[tot]; } else if(task==2) { if(tot
View Code

 

转载于:https://www.cnblogs.com/onioncyc/p/7053743.html

你可能感兴趣的文章
notepad++下载Subversion插件,显示intalltion of subversion failed
查看>>
Internationalization composition diagram
查看>>
四轴自适应控制算法的一些尝试开源我的山猫飞控和梯度在线辨识自适应等算法—(转)...
查看>>
[转]Android的userlogin登录
查看>>
接口里面的静态方法--痒啊
查看>>
电子商务网站数据分析常用指标(转)
查看>>
windows下用go语言写程序
查看>>
【转】iOS Programming – 触摸事件处理
查看>>
Handler的介绍及实例
查看>>
Vitamio FAQ(2012-11-20 )
查看>>
程序集引用里面的“Culture=neutral”是什么意思?
查看>>
批处理学习笔记2 - 编写批处理的for循环
查看>>
【web前端面试题整理07】我不理解表现与数据分离。。。
查看>>
C++一些注意点之转换操作符
查看>>
以JTextPanel为例Swing的鼠标事件详解
查看>>
【转】python中的lambda函数
查看>>
HashSet中实现不插入重复的元素
查看>>
atitit.破解 拦截 绕过 网站 手机 短信 验证码 之自动获取手机短信方式 attilax 总结...
查看>>
mongodb用户授权
查看>>
操作系统学习基本概念汇总
查看>>