题目:http://acm.timus.ru/problem.aspx?space=1&num=1306
题意:
找一个数列的中位数。
分析:
这题纯粹是卡内存的题~~,我先是用优先队列,然后MLE了0.0
然后用STL的heap就水过了~
代码:
#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <string>
#include <map>
#include <cmath>
#include <queue>
#include <set>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int N = 5e3 + 9;
const double PI = acos (-1.0);
int a[125002];
int main() {
// freopen ("f.txt", "r", stdin);
int n,x;
scanf("%d",&n);
for(int i=0;i<=n/2;i++){
scanf("%d",&a[i]);
}
make_heap(a,a+n/2+1);
for(int i=n/2+1;i<n;i++){
scanf("%d",&x);
if(x>=a[0])continue;
pop_heap(a,a+n/2+1);
a[n/2]=x;
push_heap(a,a+n/2+1);
}
if(n&1){
printf("%d.0\n",a[0]);
}
else{
double ans=0;
ans+=a[0];pop_heap(a,a+n/2+1);
ans+=a[0];
printf("%.1lf\n",ans/2);
}
return 0;
}