标签:lg NC50940 Median Running num push 题目 gl size
题目
- 原题地址:Running Median
- 题目编号:NC50940
- 题目类型:对顶堆
- 时间限制:C/C++ 5秒,其他语言10秒
- 空间限制:C/C++ 65536K,其他语言131072K
1.题目大意
- 多组数据,每组有标号、元素个数(奇数个)以及元素,输出每组的标号、输出的个数、以及每次读到奇数个元素时已经读取的元素中的中位数,
2.题目分析
- 动态维护序列中位数,用两个优先队列(堆)解决问题
3.题目代码
#include <bits/stdc++.h>
using namespace std;
int fr(){
char ch;
int sum,sign=1;
while((ch=getchar())>'9'||ch<'0') if(ch=='-') sign=-1;sum=ch-'0';
while((ch=getchar())>='0'&&ch<='9') sum=(sum<<3)+(sum<<1)+ch-'0';
return sum*sign;
}
int main() {
int t;
cin >> t;
while(t--) {
int num, n;
cin >> num >> n;
cout << num << ' ' << n/2+1 << endl;
priority_queue<int> gl;
priority_queue<int, vector<int>, greater<int>> lg;
cin >> num, lg.push(num);
cout << num << ' ';
// l 3 g 4 | g 2 l 1
for(int i=2;i<=n;i++) {
num = fr();
if(lg.top()>num) gl.push(num);
else lg.push(num);
if(lg.size()>gl.size()+1) gl.push(lg.top()), lg.pop();
else if(gl.size()>lg.size()+1) lg.push(gl.top()), gl.pop();
if(i%2==1)
if(lg.size()>gl.size()) cout << lg.top() << ' ';
else cout << gl.top() << ' ';
if(i%20==0) cout << endl;
}
cout << endl;
}
}
标签:lg,NC50940,Median,Running,num,push,题目,gl,size 来源: https://www.cnblogs.com/zhangyi101/p/16629758.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。