hdu 4006 第K大的数(优先队列)

N次操作 I是插入一个数 Q是输出第K大的数

Sample Input
8 3 //n k
I 1
I 2
I 3
Q
I 5
Q
I 4
Q

Sample Output
1
2
3

 1 # include <iostream>
 2 # include <cstdio>
 3 # include <cstring>
 4 # include <algorithm>
 5 # include <string>
 6 # include <cmath>
 7 # include <queue>
 8 # include <list>
 9 # define LL long long
10 using namespace std ;
11
12 struct ss
13 {
14     friend bool operator<(const ss a,const ss b)
15     {
16         if(a.v>b.v)
17             return 1;
18         else
19             return 0;
20     }
21     int v;
22 };
23
24 int main()
25 {
26     //freopen("in.txt","r",stdin) ;
27     int n , k ;
28     char s[10];
29     while(scanf("%d %d" , &n , &k) != EOF)
30     {
31         priority_queue<ss> q ;
32         ss t;
33         while(n--)
34         {
35             scanf("%s",s);
36             if(s[0]==‘I‘)
37             {
38                 int a;
39                 scanf("%d",&a);
40                 t.v=a;
41                 q.push(t);
42                 if(q.size()>k)
43                 {
44                     q.pop();
45                 }
46             }
47             else
48             {
49                 printf("%d\n",q.top());
50             }
51         }
52     }
53
54     return 0;
55 }

时间: 2024-12-19 00:27:55

hdu 4006 第K大的数(优先队列)的相关文章

hdu 4006 The kth great number (优先队列+STB+最小堆)

The kth great number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submission(s): 6637    Accepted Submission(s): 2671 Problem Description Xiao Ming and Xiao Bao are playing a simple Numbers game. In a roun

hdu 1280 前m大的数 哈希

前m大的数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 10574    Accepted Submission(s): 3686 Problem Description 还记得Gardon给小希布置的那个作业么?(上次比赛的1005)其实小希已经找回了原来的那张数表,现在她想确认一下她的答案是否正确,但是整个的答案是很庞大的表,小

hdu 4006 The kth great number (优先队列)

优先队列头文件 #include <queue> 默认优先为从大到小优先. 自定义优先级 1 struct cmpmin{ //按从小到大 2 3 // 因为标准库默认使用元素类型的<操作符来确定它们之间的优先级关系. 4 bool operator ()(int &a, int &b){ 5 return a>b; //所以规定小的元素的优先级大于大的元素. 6 } 7 }; 8 9 struct cmpmax{ //按从大到小 10 bool operator

HDU 4006 The kth great number【优先队列】

题意:输入n行,k,如果一行以I开头,那么插入x,如果以Q开头,则输出第k大的数 用优先队列来做,将队列的大小维护在k这么大,然后每次取队首元素就可以了 另外这个维护队列只有k个元素的时候需要注意一下,先将输入的数都插入之后再将多余的数弹出去,这样才能保证留在队列里面的数是前k大的数 另外想到set里面的数是从小到大排列好了的,每次取第k个元素,但是超时了= = 1 #include<iostream> 2 #include<cstdio> 3 #include<cstrin

无序数组中找第k大的数

类快排算法 由于只要求找出第k大的数,没必要将数组中所有值都排序. 快排中的partition算法,返回key在数组中的位置的cnt(相对于left的偏移量),如果cnt正好等于k,那么问题则得到解决:如果cnt小于k,去左边找第k个:如果cnt>k,则去右边找第k-cnt个.直到key的位置等于k-1,则找对问题的解. /*快排中的划分算法*/ int partition(int* input, int low, int high) { int tmp = input[low]; // 取一个

51 nod 1105 第K大的数

1105 第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 数组A和数组B,里面都有n个整数.数组C共有n^2个整数,分别是A[0] * B[0],A[0] * B[1] ......A[1] * B[0],A[1] * B[1]......A[n - 1] * B[n - 1](数组A同数组B的组合).求数组C中第K大的数. 例如:A:1 2 3,B:2 3 4.A与B组合成的C包括2 3 4 4 6 8 6 9 12共9个数. I

统计前k大的数x

我终于敲上了题目--记起来啦! 描述 给定一个数组,统计前k大的数并且把这k个数从大到小输出. 输入 第一行包含一个整数n,表示数组的大小.n < 100000. 第二行包含n个整数,表示数组的元素,整数之间以一个空格分开.每个整数的绝对值不超过100000000. 第三行包含一个整数k.k < n. 输出 从大到小输出前k大的数,每个数一行. 样例输入 10 4 5 6 9 8 7 1 2 3 0 5 样例输出 9 8 7 6 5 //AC自动机x #include<iostream&

找出整数中第k大的数

一  问题描述: 找出m个整数中第k(0<k<m+1)大的整数. 二  举例: 假设有12个整数:data[1, 4, -1, -4, 9, 8, 0, 3, -8, 11, 2, -9],请找出第5大的数(容易知道是0). 三   算法思路:        一种基于快排思想的算法可以在O(n)复杂度内找到第k大的数,首先要知道partition这个函数,它可以调整一个序列 使小于key的元素都排在key左边,大于key的元素都排在key右边,key可以在这个序列中任意选择,一般选择给定序 列

51nod p1175 区间中第K大的数

1175 区间中第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 一个长度为N的整数序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有数中,第K大的数是多少. 例如: 1 7 6 3 1.i = 1, j = 3,k = 2,对应的数为7 6 3,第2大的数为6. Input 第1行:1个数N,表示序列的长度.(2 <= N <= 50000) 第2 - N + 1行:每行1个数,对应序列中的元素.(0 <= S[i] <