版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sugarbliss/article/details/82725156
----------------------------------------------------传送门----------------------------------------------------
思路:把删除的数放入set,或者优先队列,然后维护。
set做法:
#include<bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define LL long long
set <int> s;
int main()
{
int n;
cin >> n;
for(int i = 1; i <= n; i++)
s.insert(i);
set<int> ::iterator it;
while(n--)
{
string str;
cin >> str;
if(str == "New")
{
it = s.begin();
cout << *it << endl;
s.erase(it);
}
else
{
int x; cin >> x;
it = s.find(x);
if(it != s.end()) puts("Failed");
else
{
puts("Successful");
s.insert(x);
}
}
}
}
优先队列做法:
#include<bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define LL long long
const int MAX_N = 100005;
int n, t, x;
string str;
priority_queue<int,vector<int>,greater<int> > q;
bool vis[MAX_N];
int main()
{
cin >> n;
while(n--)
{
cin >> str;
if(str == "New")
{
if(!q.empty())
{
cout << q.top() << endl;
vis[q.top()] = true;
q.pop();
}
else
{
vis[++t] = true;
cout << t << endl;
}
}
else
{
cin >> x;
if(vis[x])
{
vis[x] = false;
puts("Successful");
q.push(x);
}
else puts("Failed");
}
}
}