HDU1425 sort 【STL堆排序】

sort

Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 27781    Accepted Submission(s): 8404

Problem Description

给你n个整数,请按从大到小的顺序输出其中前m大的数。

Input

每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。

Output

对每组测试数据按从大到小的顺序输出前m大的数。

Sample Input

5 3
3 -35 92 213 -644

Sample Output

213 92 3

Hint

Hint

请用VC/VC++提交
#include <stdio.h>
#include <algorithm>
#define maxn 1000002
using namespace std;

int arr[maxn];

int main()
{
    int n, m, i;
    while(scanf("%d%d", &n, &m) == 2){
        for(i = 0; i < n; ++i)
            scanf("%d", &arr[i]);
        make_heap(arr, arr + n);
        printf("%d", arr[0]);
        for(i = 0; i < m - 1; ++i){
            pop_heap(arr, arr + n - i);
            printf(" %d", arr[0]);
        }
        printf("\n");
    }
    return 0;
}

HDU1425 sort 【STL堆排序】

时间: 2024-10-18 21:05:24

HDU1425 sort 【STL堆排序】的相关文章

hd1425 sort【堆排序】

sort Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 27771    Accepted Submission(s): 8400 Problem Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,

HDU 1425 sort(堆排序/快排)

传送门 Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数. Output 对每组测试数据按从大到小的顺序输出前m大的数. Sample Input 5 3 3 -35 92 213 -644 Sample Output 213 92 3 1.使用内建sort函数 #include<iostream>

HDU1425 sort【水题】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1425 题目大意: 给你N和M,然后给你N个数,输出前M大的数. 思路: 数据范围为-500000~500000,N的范围为1000000.两种做法. 1).建个1000000数组,存N个数,用sort排下序,输出前M大的数,这样提交900+MS,有时会超时. 2).建个1000000数组,用下标表示数值,输入一个数,就将对应下标的数值加一.最后从后向前遍历, 找到M个数并输出. AC代码: #in

sort (STL)

#include <queue> 1.优先队列 定义方式 priority_queue <int> n; //降序 priority_queue <int, vector<int>, greater<int> > n; //升序 队列操作 n.push() //入列 n.size() //返回队列内元素个数 n.top() //返回队首元素的值 n.pop() //队首元素出栈 n.back() //返回队尾元素 q.empty() //判断队列

HDU1425:sort

hash原来做过 <pre name="code" class="cpp">#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int M = 1000001; #define MIN -99999999 bool hashh[M]; void init() { for(int i=0;i<M;i++)

STL sort

STL的sort()算法,数据量大时采用Quick Sort,分段递归排序,一旦分段后的数据量小于某个门槛,为避免Quick Sort的递归调用带来过大的额外负荷,就改用Insertion Sort.如果递归层次过深,还会改用Heap Sort.本文先分别介绍这个三个Sort,再整合分析STL sort算法(以上三种算法的综合) -- Introspective Sorting(内省式排序). 一.Insertion Sort Insertion Sort是<算法导论>一开始就讨论的算法.它的

[技术] OIer的STL入门教程

注: 本文主要摘取STL在OI中的常用技巧应用, 所以可能会重点说明容器部分和算法部分, 且不会讨论所有支持的函数/操作并主要讨论 C++11 前支持的特性. 如果需要详细完整的介绍请自行查阅标准文档. 原始资料源于各大C++参考信息网站/C++标准文档和Wikipedia. 1.概述 首先, 什么是STL? STL, 即标准模板库, 全称Standard Template Library , 主要包含4个组件, 即算法, 函数, 容器, 迭代器. 这里的函数似乎主要指函数式编程(FP)中的函数

数据结构 - 归并排序(merging sort)

归并排序(merging sort): 包含2-路归并排序, 把数组拆分成两段, 使用递归, 将两个有序表合成一个新的有序表. 归并排序(merge sort)的时间复杂度是O(nlogn), 实际效果不如快速排序(quick sort)和堆排序(heap sort), 但是归并排序是稳定排序, 而快速排序和堆排序则不是. 代码: /* * main.cpp * *  Created on: 2014.6.12 *      Author: Spike */ /*eclipse cdt, gcc

算法之简单选择排序和堆排序

3. 选择排序-简单选择排序(Simple Selection Sort) 基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 简单选择排序的示例: 操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换: 第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换: 以此类推.....