洛谷 https://www.luogu.org/problem/show?pid=T575

来源:互联网 发布:传奇世界h5辅助软件 编辑:程序博客网 时间:2024/04/20 23:19

输入格式:
第一行一个正整数N

第二行N个整数Ai

若Ai>0,则在把Ai扔到堆里

若Ai=0,则输出一行一个数,分别表示当前堆里的最大值。(保证堆非空)

若Ai<0,则把-Ai从堆里丢出去(保证堆中存在Ai)(若有多个只丢一个)

输出格式:
行数为Ai=0的个数,如输入描述。

#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<set>using namespace std;priority_queue<int>q;int n;multiset<int>s;multiset<int>::iterator it;int main(){    scanf("%d",&n);    int x;    for(int i=1;i<=n;i++)    {        scanf("%d",&x);        if(x>0)        {            q.push(x);            continue;        }        else if(x<0)        {            s.insert(-x);            continue;        }        else if(x==0)        {            it=s.find(q.top());            if(it==s.end())            {                printf("%d\n",q.top());                continue;            }            else            {                do                {                    s.erase(q.top());                    q.pop();                    it=s.find(q.top());                }                while(it!=s.end());                printf("%d\n",q.top());            }        }    }}

%%%sys
虽然是堆排……但是显然set的可重集合更简单……

3 0
原创粉丝点击