The kth great number

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)
Total Submission(s): 6020    Accepted Submission(s): 2436

Problem Description
Xiao Ming and Xiao Bao are playing a simple Numbers game. In a round Xiao Ming can choose to write down a number, or ask Xiao Bao what the kth great number is. Because the number written by Xiao Ming is too much, Xiao Bao is feeling giddy. Now, try to help Xiao Bao.
 
Input
There are several test cases. For each test case, the first line of input contains two positive integer n, k. Then n lines follow. If Xiao Ming choose to write down a number, there will be an " I" followed by a number that Xiao Ming will write down. If Xiao Ming choose to ask Xiao Bao, there will be a "Q", then you need to output the kth great number.
 
Output
The output consists of one integer representing the largest number of islands that all lie on one line.
 
Sample Input
8 3 I 1 I 2 I 3 Q I 5 Q I 4 Q
 
Sample Output
1 2 3

Hint

Xiao Ming won't ask Xiao Bao the kth great number when the number of the written number is smaller than k. (1=<k<=n<=1000000).

 题意: 大致是输入一些数,这个过程中不断询问第k大的数是多少?
因而普通的排序是不行的,所以很好定义为最小堆,最大堆的求解...
但是对堆的求解也有两种,第一种是构造一个k堆,然后再输入数据,不断更新维护这个k堆,我们暂时叫他第k堆吧...
这样的话,一此题给的sample  data  为列,
 
所以  红黑树来表示的话就是下面这个了...
为了这,STL  multiset....
代码:

 #include<iostream>
#include<set>
using namespace std; int main()
{
int n,k,i,temp;
char ss[];
multiset<int> sta;
while(scanf("%d%d",&n,&k)!=EOF)
{
sta.clear();
for(i=;i<n;i++)
{
scanf("%s",ss);
if(*ss=='I')
{
scanf("%d",&temp);
if(i<k) sta.insert(temp);
else
{
int head=*sta.begin();
if(temp>head)
{
sta.erase(sta.begin());
sta.insert(temp);
}
}
}
else cout<<*(sta.begin())<<endl;
}
}
return ;
}

方法二:

采取传统的最小堆,最大堆求解..

 /*最小堆hdu 4006*/
/*@code Gxjun*/
#include<stdio.h>
#include<string.h>
#define maxn 1000002
int heap[maxn],n,k;
void change(int *a ,int *b){
*a^=*b , *b^=*a, *a^=*b;
}
void updata_heap(int tol)
{
if(!(tol&)) //是偶数数表示完全二叉树
{
if(heap[tol]<heap[tol>>])
change(&heap[tol],&heap[tol>>]);
tol--;
}
for(int i=tol ; i> ;i-=)
{
if(heap[i]>heap[i-])
{
if(heap[i-]<heap[i>>])
change(&heap[i-],&heap[i>>]);
}
else
if(heap[i]<heap[i>>])
change(&heap[i],&heap[i>>]);
}
} //数据更新
void input_heap()
{
char ss[];
int i,temp;
for(i= ; i<=k ;i++)
scanf("%s %d",ss,&heap[i]);
updata_heap(k); for(i=k+ ;i<=n ;i++)
{
scanf("%s",ss);
if(*ss=='I')
{
scanf("%d",&temp);
if(temp>heap[])
{
heap[]=temp;
updata_heap(k);
}
}
else
if(*ss=='Q')
printf("%d\n",heap[]);
}
}
int main()
{
/*freopen("test.out","w",stdout);*/
while(scanf("%d%d",&n,&k)!=EOF)
{
/*memset(heap,0,sizeof(int)*(k+2));*/
input_heap();
}
return ;
}
 
 

HDUOJ----4006The kth great number(最小堆...)的更多相关文章

  1. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

  2. Lintcode: Kth Smallest Number in Sorted Matrix

    Find the kth smallest number in at row and column sorted matrix. Example Given k = 4 and a matrix: [ ...

  3. Lintcode401 Kth Smallest Number in Sorted Matrix solution 题解

    [题目描述] Find the kth smallest number in at row and column sorted matrix. 在一个排序矩阵中找从小到大的第 k 个整数. 排序矩阵的 ...

  4. HDOJ4006 The kth great number 【串的更改和维护】

    The kth great number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Oth ...

  5. HDU 4006 The kth great number 优先队列、平衡树模板题(SBT)

    The kth great number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Oth ...

  6. [LeetCode] Kth Smallest Number in Multiplication Table 乘法表中的第K小的数字

    Nearly every one have used the Multiplication Table. But could you find out the k-th smallest number ...

  7. Lintcode: Kth Prime Number (Original Name: Ugly Number)

    Ugly number is a number that only have factors 3, 5 and 7. Design an algorithm to find the kth numbe ...

  8. 排序矩阵中的从小到大第k个数 · Kth Smallest Number In Sorted Matrix

    [抄题]: 在一个排序矩阵中找从小到大的第 k 个整数. 排序矩阵的定义为:每一行递增,每一列也递增. [思维问题]: 不知道应该怎么加,因为不是一维单调的. [一句话思路]: 周围两个数给x或y挪一 ...

  9. 2018中国大学生程序设计竞赛 - 网络选拔赛 1001 - Buy and Resell 【优先队列维护最小堆+贪心】

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6438 Buy and Resell Time Limit: 2000/1000 MS (Java/O ...

随机推荐

  1. eclipse在Windows7 64 位下出现Unhandled event loop exception No more handles

    1..如果不影响工程正常发布运行,就不要管他了2.工作空间有毛病.把workspace的.metadata删了3.把eclipse重装下.一般第二步能解决大多数问题.

  2. 【BZOJ】【2595】【WC2008】游览计划

    Orz zky神犇http://blog.csdn.net/iamzky/article/details/42029921 spfa的灵活应用!(好像是求了一个叫做斯坦纳树的东西……) o(︶︿︶)o ...

  3. Snail—Hibernate反向生成实体类及配置文件

    今天学习了Hibernate的反向生成类文件 第一步.打开myeclipse中的database视图,找到对应的表,选中后右键单击. watermark/2/text/aHR0cDovL2Jsb2cu ...

  4. Unix/Linux环境C编程新手教程(30) 字符串操作那些事儿

    函数介绍 rindex(查找字符串中最后一个出现的指定字符) 相关函数 index,memchr,strchr,strrchr 表头文件 #include<string.h> 定义函数 c ...

  5. iOS:删除、插入、移动单元格

    删除.插入.移动单元格的具体实例如下:   代码如下: #import "ViewController.h" #define NUM 20 typedef enum { delet ...

  6. perfect-rectangle

    https://leetcode.com/problems/perfect-rectangle/ // https://discuss.leetcode.com/topic/55944/o-n-log ...

  7. Python爬虫——使用 lxml 解析器爬取汽车之家二手车信息

    本次爬虫的目标是汽车之家的二手车销售信息,范围是全国,不过很可惜,汽车之家只显示100页信息,每页48条,也就是说最多只能够爬取4800条信息. 由于这次爬虫的主要目的是使用lxml解析器,所以在信息 ...

  8. iOS开发-Interface Builder的前世今生

    Interface Builder,是用于苹果公司Mac OS X操作系统的软件开发程序,Xcode套件的一部分,于1988年创立.它的创造者Jean-Marie Hullot自称是“一个热爱旅行.充 ...

  9. GO语言基础之reflect反射

    反射reflection 1. 反射可以大大的提高程序的灵活性,使得 interface{} 有更大的发挥余地 2. 反射使用 TypeOf 和 ValueOf 函数从接口中获取目标对象信息 3. 反 ...

  10. 邮件发送(C#)

    using System;using System.Collections.Generic;using System.Text;using System.Net.Mail;using System.N ...