• HDOJ4006


    维持一个整数序列,支持2种操作:

    1、增加一个整数到序列中;

    2、求序列的第K大的数。

    思路:建两个堆,一个小堆来保存前K大的数,一个大堆来保存剩余的数,这样的话,就满足小堆中最小的数也会大于等于大堆中最大的数,在插入的过程中,我们仍需维持这种性质,先将插入的数进入大堆,然后比较2个堆顶的数,若不满足上述性质则交换,直到满足为止。

    建大堆:priority_queue<int> qmax;

    建小堆:priority_queue<int ,vector<int>,greater<int> >qmin.

    View Code
    #include <stdio.h>
    #include <queue>
    using namespace std;
    int n,k;
    int main()
    {
        int i,x;
        char c;
        while(~scanf("%d%d",&n,&k))
        {
            priority_queue<int> qmax;
            priority_queue<int,vector<int>,greater<int> >qmin;
            for(i=0;i<n;i++)
            {
                c=0;
                while(c!='I' && c!='Q') scanf("%c",&c);
                if(i<k)
                {
                    scanf("%d",&x);
                    qmin.push(x);
                    continue;
                }
                if(c=='I')
                {
                    scanf("%d",&x);
                    qmax.push(x);
                    while(qmin.top()<qmax.top())
                    {
                        int a,b;
                        a=qmin.top(),qmin.pop();
                        b=qmax.top(),qmax.pop();
                        qmin.push(b);
                        qmax.push(a);
                    }
                }
                else    printf("%d\n",qmin.top());
            }
        }
        return 0;
    }
  • 相关阅读:
    线程池
    多线程随笔
    注解随笔
    反射机制
    iO流
    FastDFS+docker建立分布式文件系统
    Java之Exception
    Java之String
    手写SpringMvc
    spring中一些常用注解的含义
  • 原文地址:https://www.cnblogs.com/algorithms/p/2588103.html
Copyright © 2020-2023  润新知