题目描述
blablabla
样例
blablabla
作弊使用multiset
C++ 代码
//Author:ex_jason
#include<bits/stdc++.h>
#define N 500010
#define NN 5010
#define NNN 510
#define INF 0x3f3f3f3f
#define pi 3.1415926535897932384626433
typedef long long ll;
const int mod=1e9+7;
using namespace std;
int a[N],cnt=0;
int main()
{
int n;
multiset<int> s;
cin>>n;
for (int i=1;i<=n;i++)
{
string t;
int x,y;
cin>>t;
if (t=="I")
{
cin>>x;
s.insert(x);
a[++cnt]=x;
}
if (t=="PM") cout<<*s.begin()<<endl;
if (t=="DM") s.erase(s.find(*s.begin()));
if (t=="D")
{
cin>>x;
if (s.find(a[x])!=s.end()) s.erase(s.find(a[x]));
}
if (t=="C")
{
cin>>x>>y;
if (s.find(a[x])!=s.end()) s.erase(s.find(a[x]));
a[x]=y;
s.insert(y);
}
}
return 0;
}
为什么要判断(s.find(a[x])!=s.end())
s.find()的意思是在s中寻找a[x]元素,找不到就返回s.end(),所以判断是找到的情况下再进行删除,否则可能会出现错误
s.erase(s.find(*s.begin())) == s.erase(s.begin());这句代码可以简化一下,两者是等价的
这个方法可以
唔 跟我想一块去了 !