洛谷 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\n",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\n",s.count(x));
}
}
for(it=s.begin();it!=s.end();it++)
printf("%d ",*it);
return 0;
}