Pagini recente » Cod sursa (job #186759) | Cod sursa (job #1688699) | Cod sursa (job #2143773) | Clasamentul arhivei de probleme | Cod sursa (job #2750511)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
#include <set>
using namespace std;
ifstream f("zeap.in");
ofstream g("zeap.out");
bool cmp(const pair<int,int> &a,const pair<int,int> &b)
{
return a.first - a.second > b.first - b.second;
}
set <int> s;
priority_queue < pair<int,int> , vector<pair<int,int>> , decltype(&cmp) > difs(cmp);
int main()
{
char op;
int x;
while(f>>op)
{
if(op != 'M')
{
f>>x;
if(op == 'I')
{
auto p = s.find(x);
if(p == s.end())
{
s.insert(x);
p = s.find(x);
if(p != s.begin())
{
auto q=p;
--q;
difs.push(make_pair(*p, *q));
}
auto q=p;
++q;
if(q != s.end())
{
difs.push(make_pair(*q, *p));
}
}
}
else if(op == 'S')
{
auto p = s.find(x);
if(p == s.end())
g<<-1<<'\n';
else
{
auto q=p;
++q;
if(p != s.begin() && q != s.end())
{
--p;
difs.push(make_pair(*q, *p));
}
s.erase(x);
}
}
else
{
if(s.find(x)!=s.end())
g<<"1\n";
else
g<<"0\n";
}
}
else
{
f>>op;
f>>op;
if(op == 'X')
{
if(s.size()>=2)
g<< *(s.rbegin()) - *(s.begin())<<'\n';
else
g<<"-1\n";
}
else
{
if(s.size()>=2)
{
while(s.find(difs.top().first)==s.end() || s.find(difs.top().second)==s.end())
difs.pop();
g<<difs.top().first - difs.top().second<< '\n';
}
else
g<<"-1\n";
}
}
}
return 0;
}