c++ stl

来源:互联网 发布:单片机的32个引脚介绍 编辑:程序博客网 时间:2024/06/04 17:49

c++ 中的multiset,默认最小值,要取最大值,要重新声明一个类,并重载<符号

,在多校联合中,看到有重载()的,借用了一下,发现还真能行.

题目:hdu 5349


#include<bits/stdc++.h>using namespace std;const int inf = 0x3f3f3f3f;struct classCompare{   bool operator()(const int& lhs, const int& rhs)  //重载(),   {       return lhs > rhs ;   }};multiset<int> s1;multiset<int,classCompare > s2;int main(){    std::ios::sync_with_stdio(false);    int n;    int i,j;    int x,y;    while(cin>>n)    {        s1.clear();        s2.clear();    for(i=0;i<n;i++)    {        cin>>x;        int t;        if(x==1)        {            cin>>y;            s1.insert(y);            s2.insert(y);        }        else if(x==2)        {                if(s1.size())                {                    t= *s1.begin();                    s1.erase(t);                }                {                    s2.erase(t);                }        }        else        {            if(s2.size())            cout<<(*s2.begin())<<endl;            else                cout<<0<<endl;        }    }    }    return 0;}


priority_queue<int> pq 此时默认是大顶堆,c++中唯一大的在前,如果要采用小顶堆,用如下声明:

priority_queue<int,vector<int>,greater<int> >


///////////////////////////////////////////////////////////////////////////////////////////////

向上取整函数 int ceil(double);

向下取整函数 int floor(double); 

0 0