poj1442(最大最小堆)

来源:互联网 发布:unity2d横版rpg源码 编辑:程序博客网 时间:2024/05/22 11:19
在输入的M个数中输出第N大的数。组建一个最大最小堆便可。题目本身不是什么难点,记下博文只是怕哪时忘记了如何在priority_queue中重载整数的优先级。

#include<iostream>
#include<stdio.h>
#include<queue>

using namespace std;

struct cmp1
{
    bool operator()(int&a,int &b)
    {
       return a<b;
    }
};
struct cmp2
{
    bool operator()(int&a,int &b)
    {
       return a>b;
    }
};
priority_queue<int,vector<int>,cmp2>que1;//最小堆
priority_queue<int,vector<int>,cmp1>que2;//最大堆
int ans[40000];
int main()
{
    int n,m;
   cin>>n>>m;
    for(int i=0;i
    {
       scanf("%d",&ans[i]);
    }
    int a=0,b;
    for(inti=1;i<=m;i++)
    {
       scanf("%d",&b);
       for(int j=a;j
       {
          que1.push(ans[j]);
          if(!que2.empty())
           {
             if(que1.top()
             {
                int p1=que1.top();
                int p2=que2.top();
                que1.pop();
                que2.pop();
                que1.push(p2);
                que2.push(p1);
             }
           }
       }
      cout<<que1.top()<<endl;
       int p=que1.top();
       que1.pop();
       que2.push(p);
       a=b;
    }
    return 0;
}

0 0
原创粉丝点击