您的位置:首页 > 产品设计 > UI/UE

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: