洛谷 U136249 货比八家

洛谷 U136249 货比八家

洛谷传送门

题目背景

是的,SeawaySeawa**y觉得货比三家太简单了,他向麻麻提出要更难的挑战。于是他的麻麻带着他货比八家。qwq玩大了......

题目描述

SeawaySeawa**y现在拎着一个空的菜兜子。在整个买菜的过程中,会发生NN个事件。每个事件描述如下:

1 x 麻麻向菜兜子里又添加了一个优秀度为x的菜。

2 麻麻询问当前菜兜子里有多少菜。

3 x 麻麻要SeawaySeawa**y把兜子里优秀度为x的菜全部扔掉。

4 x k 麻麻要SeawaySeawa**y把兜子里优秀度为x的菜扔掉k个。

5 x 麻麻询问当前菜兜子里优秀度为x的菜有几个。没有输出0。

输入格式

输入的第一行有一个整数NN,接下来的NN行,每行描述一个事件。

输出格式

按顺序回答麻麻的每个问题qwq。并且,当所有事件结束时,按从小到大顺序输出兜子里所有的菜的优秀度.


命题背景:

同上。

题解:

用multiset模拟AC。

代码:

#include<cstdio>
#include<set>
using namespace std;
int n;
multiset<int> s;
multiset<int>::iterator it;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        int opt,x,k;
        scanf("%d",&opt);
        if(opt==1)
        {
            scanf("%d",&x);
            s.insert(x);
        }
        else if(opt==2)
            printf("%d
",s.size());
        else if(opt==3)
        {
            scanf("%d",&x);
            s.erase(x);
        }
        else if(opt==4)
        {
            scanf("%d%d",&x,&k);
            while(k--)
            {
                it=s.find(x);
                s.erase(it);
            }
        }
        else if(opt==5)
        {
            scanf("%d",&x);
            printf("%d
",s.count(x));
        }
    }
    for(it=s.begin();it!=s.end();it++)
        printf("%d ",*it);
    return 0;
}
原文地址:https://www.cnblogs.com/fusiwei/p/13859053.html