zoukankan      html  css  js  c++  java
  • 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 ()(int &a, int &b){
    11         return a<b;                       
    12     }
    13 };
    14 
    15 
    16 //多个元素的时候 
    17 struct node{      
    18     int x, y;
    19     friend bool operator <(int a, int b){        //小的优先级小,所以按照x从大到小,注意默认是<来确定优先级。 
    20         return a.x < b.x;
    21     }
    22 }
    23 
    24 struct node{
    25     int x, y;
    26     friend bool operator <(int a, int b){        //小的优先级大,所以按照x从小到大 
    27         return a.x > b.x;                       
    28     }
    29 }
    View Code

    本题要输出第K大的数,因为数据量大,不能每次排序,所以用优先队列来解决。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <vector>
     4 #include <queue>
     5 using namespace std;
     6 struct cmp{
     7     bool operator ()(int &a,int &b){
     8         return a>b;//最小值优先
     9     }
    10 };
    11 int n, k, val, cnt;
    12 char c;
    13 int main(){
    14     while(~scanf("%d%d", &n, &k)){
    15         cnt = 0;
    16         priority_queue <int, vector<int>,cmp> q;
    17         while(n--){
    18             cin>>c;
    19             if(c == 'Q'){
    20                 printf("%d
    ", q.top());
    21             }
    22             else if(c == 'I'){
    23                 scanf("%d", &val);
    24                 if(cnt < k){
    25                     q.push(val);cnt++;
    26                 }
    27                 else{
    28                     if(val > q.top()){
    29                         q.pop();
    30                         q.push(val);
    31                     }
    32                 }
    33             }
    34         }
    35         
    36     }
    37     
    38     
    39     return 0;
    40 }
  • 相关阅读:
    打印机无法打印文件
    .Net com组件操作excel(不建议采用Com组件操作excel)
    Zebra
    Map遍历方式
    PageHelper原理
    MySQL8.0新特性
    算法_插入排序
    贝叶斯定理
    二叉树学习笔记
    Java校验时间段重叠
  • 原文地址:https://www.cnblogs.com/titicia/p/4055575.html
Copyright © 2011-2022 走看看