Pagini recente » Istoria paginii runda/evaluare_cex_sv/clasament | Cod sursa (job #2169991) | Cod sursa (job #1057667) | Autentificare | Cod sursa (job #1690939)
#include<fstream>
#include<algorithm>
#include<set>
#include<stdlib.h>
#include<iostream>
#include<map>
using namespace std;
int v[50010], s[50010], m[50010];
ifstream in("zeap.in");
ofstream out("zeap.out");
int N, K;
multiset<int> dif;
set<int> Set;
int main()
{
char c;
int nr;
while (in >> c)
{
if (c == 'I')
{
std::pair<std::set<int>::iterator, bool> ret;
in >> nr;
ret = Set.insert(nr);
if (ret.second && Set.size()>1)
{
auto it = ret.first;
if (it == Set.begin())
{
it++;
dif.insert(abs(*it - *ret.first));
}
else
{
it = Set.end();
--it;
if (it == ret.first)
{
it--;
dif.insert(abs(*it - *ret.first));
}
else
{
it = ret.first;
++it;
--ret.first;
dif.erase(dif.find(abs(*it - *ret.first)));
++ret.first;
it = ret.first;
++it;
dif.insert(abs(*it - *ret.first));
it = ret.first;
--it;
dif.insert(abs(*it - *ret.first));
}
}
}
}
else if (c == 'S')
{
in >> nr;
auto e = Set.find(nr);
if (e != Set.end())
{
auto it = e;
if (Set.size() > 1)
{
if (it == Set.begin())
{
it++;
dif.erase(abs(*it - *e));
}
else
{
it = Set.end();
--it;
if (it == e)
{
it--;
dif.erase(abs(*it - *e));
}
else
{
it = e;
++it;
dif.erase(dif.find(abs(*it - *e)));
it = e;
--it;
dif.erase(dif.find(abs(*it - *e)));
++e;
dif.insert(abs(*it - *e));
}
}
}
Set.erase(nr);
}
else
out << "-1\n";
}
else if (c == 'C')
{
in >> nr;
if (Set.find(nr) == Set.end())
out << "0\n";
else
out << "1\n";
}
else
{
in >> c;
if (c == 'A')
{
if (Set.size() >= 2)
out << abs(*(Set.rbegin()) - *(Set.begin())) << '\n';
else
out << "-1\n";
}
else if (c == 'I')
{
if (Set.size() >= 2)
{
out << *dif.begin() << '\n';
}
else
out << "-1\n";
}
in >> c;
}
}
return 0;
}