poj 3784 Running Median
2016-07-06 22:50
351 查看
Running Median
Description
For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After each odd-indexed value is read, output the median (middle value) of the elements received so far.
Input
The first line of input contains a single integer P, (1 ≤ P ≤ 1000), which is the number of data sets that follow. The first line of each data set contains the data set number, followed by a space, followed by an odd decimal integer M, (1 ≤ M ≤ 9999), giving the total number of signed integers to be processed. The remaining line(s) in the dataset consists of the values, 10 per line, separated by a single space. The last line in the dataset may contain less than 10 values.
Output
For each data set the first line of output contains the data set number, a single space and the number of medians output (which should be one-half the number of input values plus one). The output medians will be on the following lines, 10 per line separated by a single space. The last line may have less than 10 elements, but at least 1 element. There should be no blank lines in the output.
Sample Input
Sample Output
Source
Greater New York Regional 2009
[Submit] [Go Back] [Status] [Discuss]
poj 3784
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 1652 | Accepted: 818 |
For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After each odd-indexed value is read, output the median (middle value) of the elements received so far.
Input
The first line of input contains a single integer P, (1 ≤ P ≤ 1000), which is the number of data sets that follow. The first line of each data set contains the data set number, followed by a space, followed by an odd decimal integer M, (1 ≤ M ≤ 9999), giving the total number of signed integers to be processed. The remaining line(s) in the dataset consists of the values, 10 per line, separated by a single space. The last line in the dataset may contain less than 10 values.
Output
For each data set the first line of output contains the data set number, a single space and the number of medians output (which should be one-half the number of input values plus one). The output medians will be on the following lines, 10 per line separated by a single space. The last line may have less than 10 elements, but at least 1 element. There should be no blank lines in the output.
Sample Input
3 1 9 1 2 3 4 5 6 7 8 9 2 9 9 8 7 6 5 4 3 2 1 3 23 23 41 13 22 -3 24 -31 -11 -8 -7 3 5 103 211 -311 -45 -67 -73 -81 -99 -33 24 56
Sample Output
1 5 1 2 3 4 5 2 5 9 8 7 6 5 3 12 23 23 22 22 13 3 5 5 3 -3 -7 -3
Source
Greater New York Regional 2009
[Submit] [Go Back] [Status] [Discuss]
/* problem:poj 3784 by:S.B.S. */ #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<queue> #include<cstdlib> #include<iomanip> #include<cassert> #include<climits> #define maxn 10001 #define F(i,j,k) for(int i=j;i<=k;i++) #define M(a,b) memset(a,b,sizeof(a)) #define FF(i,j,k) for(int i=j;i>=k;i--) #define inf 0x7fffffff #define p 23333333333333333 using namespace std; int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } priority_queue<int,vector<int>,greater<int> > q1; priority_queue<int,vector<int>,less<int> > q2; vector<int> g; void add(int x) { if(q1.empty()){ q1.push(x); return; } if(x>q1.top()) q1.push(x); else q2.push(x); while(q1.size()<q2.size()){ q1.push(q2.top()); q2.pop(); } while(q1.size()>q2.size()+1) { q2.push(q1.top()); q1.pop(); } } int main() { std::ios::sync_with_stdio(false);//cout<<setiosflags(ios::fixed)<<setprecision(1)<<y; // freopen("data.in","r",stdin); // freopen("data.out","w",stdout); int t,c,n,x; cin>>t; while(t--){ while(!q1.empty()) q1.pop(); while(!q2.empty()) q2.pop(); g.clear(); cin>>c>>n; F(i,0,n-1){ cin>>x; add(x); if(i%2==0) g.push_back(q1.top()); } cout<<c<<" "<< (n+1)/2 <<endl; F(i,0,g.size()-1){ if(i>0&& i%10==0) cout<<endl; if(i%10) cout<<" "; cout<<g[i]; } cout<<endl; } return 0; }
poj 3784
相关文章推荐
- 事件CEvent的使用
- CSS3 box-reflect(倒影效果)
- C++中对象作为函数形参,返回值时,构造函数,复制构造函数,析构函数的调用顺序(1)
- Codeforces 622C Not Equal on a Segment 【线段树 Or DP】
- Codeforces 622C Not Equal on a Segment 【线段树 Or DP】
- java问题整理
- Codeforces 622C Not Equal on a Segment 【线段树 Or DP】
- c语言学习笔记47
- ORA-00600: internal error code, arguments: [kcratr1_lastbwr], [], [], [], [], [], [], []
- 上传代码到GitHub时,遇到错误:fatal,The Requested URL return error 403
- 《这本书能让你戒烟》:野路子戒烟法。也许读者是否戒烟成功已经不重要了,重要的是这本书的销售非常成功。三星推荐
- PHP 精确验证身份证号
- 专访李运华:程序员如何在技术上提升自己
- AHOI 2009 (BZOJ1798)维护序列 seq (线段树好题?)
- 关于Android 的MVP的理解
- java web常用数据库地址
- leetcode: Linked List Cycle
- 队列的C语言实现(单链表结构)
- Android中JNI使用详解(1)---Eclipse中NDK配置So文件生成
- HDU 4909 / BC 3C String