ural 1306【priority_queue+堆查找中间值】

来源:互联网 发布:数据异常怎么回事 编辑:程序博客网 时间:2024/06/06 14:05

http://acm.timus.ru/problem.aspx?space=1&num=1306—— 一道不错的“水题”

一开始用sort快排,结果到了test就MLE了。。。后来看了别人才知道可以用堆来做,今晚也花了整整一晚去研究用堆实现的priority_queue优先队列,不过总是想不明白为啥默认的是<重载会按大到小来输出,或许是因为小的数位于堆这棵二叉树的儿子位置,而大的就是root。。。


#include <vector>#include <list>#include <map>#include <set>#include <queue>#include <string.h>#include <deque>#include <stack>#include <bitset>#include <algorithm>#include <functional>#include <numeric>#include <utility>#include <sstream>#include <iostream>#include <iomanip>#include <cstdio>#include <cmath>#include <cstdlib>#include <limits.h>using namespace std;#define LL long long#define pi acos(-1)#define N  250010#define INF INT_MAX#define eps 1e-8//*********************************************//ural 1306//*********************************************priority_queue<int> q;//不用写cmp函数也可以,写了也无妨int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        int i,j;        int m=n/2;        for(i=0;i<n;i++)        {            int a;            scanf("%d",&a);            if(i<=m)            q.push(a);            else            {                q.push(a);                q.pop();            }        }        double ans=q.top();        q.pop();        if(n%2==0)        {            ans+=q.top();            q.pop();            ans/=2.0;        }        printf("%.1f\n",ans);    }    return 0;}


原创粉丝点击