1306.Sequence Median(堆排序)

1306

URAL真是没水题 以为简单的排序就好了 ME  内存限制很紧 堆排序 或者 STL

用堆排序做的 正好复习一下 都忘了

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<stdlib.h>
 6 using namespace std;
 7 #define N 1250010
 8 int a[N];
 9 void adjust(int i,int n)
10 {
11     int j;
12     a[0] = a[i];
13     j = 2*i;
14     while(j<=n)
15     {
16         if(j<n&&a[j+1]>a[j])
17         j++;
18         if(a[0]<a[j])
19         {
20             a[i] = a[j];
21             i = j;
22             j = 2*i;
23         }
24         else
25         break;
26     }
27     a[i] = a[0];
28 }
29 int main()
30 {
31     int i,j,n,t,x;
32     scanf("%d",&n);
33     int k = n/2+1;
34     for(i = 1; i <= k ; i++)
35     scanf("%d",&a[i]);
36     if(n==2)
37     {
38         printf("%.1lf\n",(a[2]/2.0+a[1]/2.0));
39         return 0;
40     }
41     for(i = k/2 ; i>= 1 ; i--)
42     adjust(i,k);
43     for(i = k+1 ; i <= n ; i++)
44     {
45         scanf("%d",&x);
46         if(x<a[1])
47         {
48             a[1] = x;
49             adjust(1,k);
50         }
51     }
52     for(i = k ; i >1 ; i--)
53     {
54         t = a[1];
55         a[1] = a[i];
56         a[i] = t;
57         adjust(1,i-1);
58     }
59     if(n%2!=0)
60     printf("%.1lf\n",1.0*a[k]);
61     else
62     printf("%.1lf\n",a[k-1]/2.0+a[k]/2.0);
63     return 0;
64 }
View Code

 

转载于:https://www.cnblogs.com/shangyu/p/3336242.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值