51nod 1785 数据流中的算法 | STL的应用
51nod 1785 数据流中的算法
题面
动态求平均数、方差、中位数。
题解
这道题的坑:
平均数在答案中是向下取整输出并在后面添加".00"
方差:平方的平均数减去平均数的平方
中位数:维护两个multiset,一个存较小的一半元素,另一个存较大的一半。当两个multiset的大小相差超过二时,把较大的multiset中多出来的那个放到另一个multiset中。这样就知道中位数或中间两个数了。
注意multiset中,st.erase(1)会删除所有大小为1的元素!
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <set>
#define INF 0x3f3f3f3f
#define space putchar(' ')
#define enter putchar('\n')
using namespace std;
typedef long long ll;
template <class T>
bool read(T &x){
char c;
bool op = 0;
while(c = getchar(), c < '0' || c > '9')
if(c == '-') op = 1;
else if(c == EOF) return 0;
x = c - '0';
while(c = getchar(), c >= '0' && c <= '9')
x = x * 10 + c - '0';
if(op) x = -x;
return 1;
}
template <class T>
void write(T x){
if(x < 0) putchar('-'), x = -x;
if(x >= 10) write(x / 10);
putchar('0' + x % 10);
}
int n, m;
queue <int> q;
multiset <int> smaller, bigger;
int sum1, cnt, sum2;
double mid;
void getmid(){
if((int)smaller.size() - (int)bigger.size() > 1){
bigger.insert(*smaller.rbegin());
smaller.erase(smaller.find(*smaller.rbegin()));
}
else if((int)bigger.size() - (int)smaller.size() > 1){
smaller.insert(*bigger.begin());
bigger.erase(bigger.begin());
}
if(bigger.size() == smaller.size())
mid = ((double) *bigger.begin() + *smaller.rbegin()) / 2;
else if(bigger.size() > smaller.size())
mid = *bigger.begin();
else
mid = *smaller.rbegin();
}
void pop(){
int u = q.front();
q.pop();
if(smaller.find(u) != smaller.end()) smaller.erase(smaller.find(u));
else bigger.erase(bigger.find(u));
getmid();
sum1 -= u;
sum2 -= u * u;
cnt--;
}
void push(int u){
q.push(u);
if(u <= mid) smaller.insert(u);
else bigger.insert(u);
getmid();
sum1 += u;
sum2 += u * u;
cnt++;
}
int main(){
read(n), read(m);
while(n--){
int op, tmp;
read(op);
if(op == 1){
if(cnt >= m) pop();
read(tmp);
push(tmp);
}
else if(op == 2)
printf("%d.00\n", sum1 / cnt);
else if(op == 3)
printf("%.2lf\n", (double) sum2 / cnt - ((double)sum1 / cnt) * ((double)sum1 / cnt));
else
printf("%.2lf\n", mid);
}
return 0;
}
51nod 1785 数据流中的算法 | STL的应用的更多相关文章
- 51nod 1785 数据流中的算法 (方差计算公式)
1785 数据流中的算法 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 51nod近日上线了用户满意度检测工具,使用高级人工智能算法,通过用户访问时间.鼠 ...
- 【51NOD】数据流中的算法
[算法]数学 [题解] 1.平均数:累加前缀和.//听说要向下取整? 2.中位数:双堆法,大于中位数存入小顶堆,小于中位数存入大顶堆,保证小顶堆内数字数量≥大顶堆,奇数则取小堆顶,偶数则取两堆顶/2. ...
- AC日记——数据流中的算法 51nod 1785
数据流中的算法 思路: 线段树模拟: 时间刚刚卡在边界上,有时超时一个点,有时能过: 来,上代码: #include <cstdio> #include <cstring> # ...
- 【51nod 1785】数据流中的算法
Description 51nod近日上线了用户满意度检测工具,使用高级人工智能算法,通过用户访问时间.鼠标轨迹等特征计算用户对于网站的满意程度. 现有的统计工具只能统计某一个窗口中,用户的满意程 ...
- STL中的算法小结
()要运用STL的算法,首先必须包含头文件<algorithm>,某些STL算法用于数值处理,因此被定义于头文件<numeric> ()所有STL算法都被设计用来处理一个或多个 ...
- 有一个问题关于stl函数中的算法问题
是不是stl中的算法函数中参数只要是和函数相关的就是函数对象和谓词?
- STL中的算法
STL中的所有算法(70个) 参考自:http://www.cppblog.com/mzty/archive/2007/03/14/19819.htmlhttp://hi.baidu.com/ding ...
- [算法]最小的K个数和数据流中的中位数
1. 最小的K个数 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 思路 Java 中的PriorityQueue是 ...
- [LeetCode解题报告] 703. 数据流中的第K大元素
题目描述 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包 ...
随机推荐
- appium 元素定位工具
两种元素定位工具: 1.uiautomatorviewer是android-sdk自带的一个元素定位工具,目录D:\androidsdk\androidsdk\tools\bin . 双击启动uiau ...
- 学习笔记 | Set
目录 Set Set 前言 不会数据结构选手 当几乎没写过什么数据结构的菜鸡遇上了毒瘤的splay和treap 时间正一点一点地被续走TAT 听说set有时候可以替代treap和splay 那么菜鸡L ...
- 【视频编解码·学习笔记】12. 图像参数集(PPS)介绍
一.PPS相关概念: 除了序列参数集SPS之外,H.264中另一重要的参数集合为图像参数集Picture Paramater Set(PPS). 通常情况下,PPS类似于SPS,在H.264的裸码流中 ...
- Hyperledger Fabric 中channel配置相关数据结构
channel Configuration Transaction Hyperledger Fabric区块链网络中的配置存储在一个configuration-transaction的集合中,每个ch ...
- mkfs命令详解
mkfs命令-->make filesystem的缩写:用来在特定的分区建立Linux文件系统 [命令作用] 该命令用来在特定的分区创建linux文件系统,常见的文件系统有ext2,ex ...
- 第十三次ScrumMeeting博客
第十三次ScrumMeeting博客 本次会议于12月3日(六)21时30分整在3公寓725房间召开,持续20分钟. 与会人员:刘畅.辛德泰.张安澜.赵奕. 1. 每个人的工作(有Issue的内容和链 ...
- 第十二次ScrumMeeting博客
第十二次ScrumMeeting博客 本次会议于11月30日(四)22时整在3公寓725房间召开,持续35分钟. 与会人员:刘畅.辛德泰.张安澜.赵奕.方科栋. 1. 每个人的工作(有Issue的内容 ...
- PSP Daily软件beta版本——基于spec评论
题目要求: 每个小组评论其他小组beta发布作品的软件功能说明书. 试用(并截图)所有其他小组的beta作品,与软件功能说明书对比,评论beta作品对软件功能说明书的实现. 根据软件功能说明书,测试所 ...
- 《Spring2之站立会议6》
<Spring2之站立会议6> 昨天,向主界面中加入语音功能部分的代码: 今天,查相关资料解决debug: 遇到问题,一些问题是得到解决了,但是一些还未被解决.
- Gradle入门(3):构建第一个Java项目
Gradle插件通过引入特定领域的约定和任务来构建你的项目.Java插件是Gradle自身装载的一个插件.Java插件提供的基本功能远比源代码编译和打包多.它为你的项目建立了一个标准的项目布局,并确保 ...