nth_element()

来源:互联网 发布:驾驶员网络培训 编辑:程序博客网 时间:2024/06/03 12:40

原题:

输入

多组输入数据

第一行为正整数n(1 <= n <= 100000)

接下来n个int范围内的正整数

输出

对于每组数据,输出一行,为这n个数中的的中位数

解析:

本题旨在快速求解中位数,考虑使用STL中位于<algorithm>库下的element(start,start+n,end)函数,其作用是使第n大元素处于第n位置,并且比这个元素小的排在这个元素前面,比这个元素大的排在后面。对于本题,令n为中位数就能快速高效通过。

代码:

#include<cstdio>#include<algorithm>using namespace std;int a[100007];int main(){    int n;    while(~scanf("%d",&n))    {        int mid = n%2 == 1 ? n/2 : n/2-1;        for(int i = 0;i < n;i++)        {            scanf("%d",&a[i]);        }        nth_element(a,a+mid,a+n);        printf("%d\n",a[mid]);    }}




原创粉丝点击