使用方法:nth_element(start, start+n, end)

使第n大元素处于第n位置(从0开始,其位置是下标为n的元素),并且比这个元素小的元素都排在这个元素之前,比这个元素大的元素都排在这个元素之后,但不能保证他们是有序的。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N=;
char s[N];
int main()
{
int len,n;
gets(s);
len=strlen(s);
scanf("%d",&n);
nth_element(s,s+n,s+len);
puts(s);
return ;
}

nth_element函数原型有四个,详细我就不一一累赘了,我们就用最普通的用法寻找第k位置的元素。

函数用法为:nth_element(first,kth,end)。

first,last 第一个和最后一个迭代器,也可以直接用数组的位置。 
kth,要定位的第k个元素,能对它进行随机访问.

将第k_th元素放到它该放的位置上,左边元素都小于等于它,右边元素都大于等于它.

例如:

vector<int> a(9);
for(int i = 0; i < 9; i++)
a[i] = i+1;
random_shuffle(a.begin(),a.end());
for(int i = 0; i < 9; i++)
cout << a[i] << " ";
cout << endl;

nth_element(a.begin(),a.begin()+4,a.end());
cout << *(a.begin()+4) << endl;

for(int i = 0; i < 9; i++)
cout << a[i] << " ";

cout << endl;

结果为:

可以发现函数只是把kth的元素放在了正确位置,对其他元素并没有排序,所以可以利用这个函数快速定位第k个元素,当然,这个函数也支持你直接写比较函数,此处不再累赘因为ACM中基本不会用到。

那么为什么要选择这个函数呢,这就和复杂度有关了,nth_element的空间复杂度为O(1),在数据量大的时候时间复杂度为O(n),数据少的情况最坏为O(n^2),因为函数原理是随机访问,但实际运用过程中,基本都会是O(n)的时间复杂度。所以说是非常迅速的。

https://ac.nowcoder.com/acm/contest/327/A

#include <bits/stdc++.h>
using namespace std;
#define ll long long
int t,n,k;
struct point
{
ll x,y;
} a[]; int main()
{
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&k);
for (int i=; i<=n; i++)
{
scanf("%lld%lld",&a[i].x,&a[i].y);
}
vector<ll> v;
for (int i=; i<=n; i++)
{
for (int j=i+; j<=n; j++)
{
for (int w=j+; w<=n; w++)
{
ll area=abs((a[j].x-a[i].x)*(a[w].y-a[i].y)-(a[w].x-a[i].x)*(a[j].y-a[i].y));
v.push_back(area);
}
}
}
nth_element(v.begin(),v.begin()+n*(n-)*(n-)/-k,v.end());
ll ans=v[n*(n-)*(n-)/-k];
if (ans%==) printf("%lld.00\n",ans/);
else printf("%lld.50\n",ans/);
}
return ;
}

nth_element函数的更多相关文章

  1. 【快速选择算法与nth_element函数】【续UVA11300 】

    在白书中提到了一种O(n)级别的寻找中位数算法 就是我们今天要介绍的主角 快速选择算法 类似快排 选择一个比较元素 进行递归处理寻找第k大元素 假设最后比较元素到了i 以下描述是我写快排的常用字符 所 ...

  2. HDU 6040 Hints of sd0061 nth_element函数

    Hints of sd0061 Problem Description sd0061, the legend of Beihang University ACM-ICPC Team, retired ...

  3. STL之nth_element()(取容器中的第n大值)

    nth_element()函数 头文件:#include<algorithm> 作用:nth_element作用为求第n大的元素,并把它放在第n位置上,下标是从0開始计数的,也就是说求第0 ...

  4. 随机生成数组函数+nth-element函数

    这几天做了几道随机生成数组的题,且需要用nth-elemeng函数,并且都是北航出的多校题…… 首先我们先贴一下随机生成数组函数的代码: unsigned x = A, y = B, z = C; u ...

  5. 牛客2018多校第六场 J Heritage of skywalkert - nth_element

    传送门 题意:提供一个随机生成函数,让你生成n个数,然后问你其中能找到的两个数的最小公倍数 最大 是多少. 思路:可以用nth_element()函数在O(n)下求出前 15 个大的数(当然,100个 ...

  6. STL中nth_element的用法

    nth_element函数原型有四个,详细我就不一一累赘了,我们就用最普通的用法寻找第k位置的元素. 函数用法为:nth_element(first,kth,end). first,last 第一个和 ...

  7. k-d tree 学习笔记

    以下是一些奇怪的链接有兴趣的可以看看: https://blog.sengxian.com/algorithms/k-dimensional-tree http://zgjkt.blog.uoj.ac ...

  8. c++ algorithm 的用法

    1 , accumulate()template<class _II, class _Ty> inline_Ty accumulate(_II _F, _II _L, _Ty _V){fo ...

  9. 【STL源码学习】STL算法学习之四

    排序算法是STL算法中相当常用的一个类别,包括部分排序和全部排序算法,依据效率和应用场景进行选择. 明细: sort 函数原型: template <class RandomAccessIter ...

随机推荐

  1. 第六周实验总结&学习总结

    一.实验目的 (1)掌握类的继承方法 (2)变量的继承和覆盖,方法的继承,重载和覆盖实现 二.实验内容 源代码 package java2; import java.util.Scanner; cla ...

  2. __name__ 与 __main__解读

    在python脚本中我们经常看到如下的代码: # hello.py def hello(): print("hello world!") def test(): hello() i ...

  3. 备份一下我的.bash_aliases文件

    # 这是陈悦老师的课程练习目录 alias cdchen="cd /home/branches/Documents/chen" # 每次grep都显示出行号 alias grep= ...

  4. Java中的session详解

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  5. 【最新】docker 安装elasticsearch + kibana步骤【第二篇_kibana】

    本文主要讲解Docker 安装 kibana并设置中文语言 [如果有需要安装elasticsearch 的朋友请移步博主第一篇文章] 话不多说! 第一步:docker 下载kibana docker ...

  6. swat - 基于web的samba管理工具

    总览 swat [ -s smb config file ] [ -a ] 描述 此程序是 samba 套件的一部分. swat 允许 samba 管理员通过web浏览器配置复杂的 smb.conf ...

  7. compiz隐藏最大化窗口标题栏

    xfwm换了compiz试试,还行,挺方便.就是这个隐藏最大化窗口的标题栏没有现成的ui设置项,google到如下解决方案: 修改后立即生效. https://planetkris.com/2009/ ...

  8. win10居然把Linux的引导覆盖了

    昨天晚上装了个windows10系统试了试,发现触摸板真的难用.最基本的双指点击做右键都搞不出来,开始菜单里要上下滚动的时候触摸板竟然要水平滑动-- 重启的时候发现居然没有Linux的引导选项了 试了 ...

  9. 学习记录:@Transactional 事务不生效

    测试时使用spring boot2.2.0,在主类中调用,@Transactional 不起作用,原代码如下: @SpringBootApplication @Slf4j @Component pub ...

  10. nodejs 模板引擎jade的简单使用

    1.jade html head style script body div ul li li jade1.js var jade=require('jade'); var str=jade.rend ...