ural 1306. Sequence Median
2012-11-21 21:26
232 查看
Sequence Median
#include<iostream> #include<queue> #include<cstdio> using namespace std; int main() { priority_queue<int> pq; int n; int r; scanf("%d",&n); if(n%2){ for(int i=0;i<n/2+1;i++){ scanf("%d",&r); pq.push(r); } for(int i=0;i<n/2;i++){ scanf("%d",&r); if(r<pq.top()){ pq.pop(); pq.push(r); } } double tmp=pq.top(); printf("%.1lf\n",tmp); }else{ for(int i=0;i<n/2+1;i++){ scanf("%d",&r); pq.push(r); } for(int i=0;i<n/2-1;i++){ scanf("%d",&r); if(r<pq.top()){ pq.pop(); pq.push(r); } } double tmp1=pq.top(); pq.pop(); double tmp2=pq.top(); printf("%.1lf\n",(tmp1+tmp2)/2); } return 0; }
#include<stdio.h> #include<string.h> #include<math.h> int heap[130000]; int heapify(int i) { int n,l,r,large,tmp; n=heap[0]; l=2*i;r=l+1; if (l<=n&&heap[l]>heap[i]) large=l; else large=i; if (r<=n&&heap[r]>heap[large]) large=r; if (large!=i) { tmp=heap[i];heap[i]=heap[large];heap[large]=tmp; heapify(large); } } int main() { int n,i,t,max; double ans; while (scanf("%d",&n)==1) { t=n/2+1; for (i=1;i<=t;i++) scanf("%d",&heap[i]); heap[0]=t; for (i=t/2;i>=1;i--) heapify(i); for (i=t+1;i<=n;i++) { scanf("%d",&t); if (t<heap[1]) { heap[1]=t; heapify(1); } } if (n%2==1) ans=heap[1]*2.0; else { max=heap[2]>heap[3]?heap[2]:heap[3]; ans=heap[1]+max*1.0; } printf("%.1lf\n",ans/2.0); } return 0; }
相关文章推荐
- Ural_1306. Sequence Median(堆)
- Ural 1306. Sequence Median
- URAL 1306. Sequence Median(优先队列)
- URAL 1306. Sequence Median
- ural 1306. Sequence Median(优先级队列 priority_queue用法)
- ural 1306. Sequence Median(优先队列)
- ural 1306 Sequence Median
- Ural 1306 Sequence Median
- ural 1306. Sequence Median
- Ural 1306. Sequence Median
- URAL 1306-Sequence Median(堆)
- ural 1306. Sequence Median
- ural 1306. Sequence Median(优先级队列 priority_queue用法)
- URAL 1306 - Sequence Median 小内存求中位数
- ural 1306【priority_queue+堆查找中间值】
- ural 1306(堆-优先级序列)
- ural 1306 堆排序找中位数
- ural 1306 (heap推排序)
- ural 鹰蛋&51nod 1306
- URAL 1001. Reverse root