Pagini recente » Cod sursa (job #2528379) | Cod sursa (job #3173172) | Cod sursa (job #1522020) | Cod sursa (job #296200) | Cod sursa (job #1194587)
#include <fstream>
#include <cstring>
#include <set>
using namespace std;
ifstream cin("zeap.in");
ofstream cout("zeap.out");
char sir[100];
set<int> A;
multiset<int> Dif;
inline int get_val()
{
int i = 2, L = strlen(sir), nr=0;
for (; i < L; ++ i)
nr = nr * 10 + sir[i] - '0';
return nr;
}
void insert(int v)
{
set<int>::iterator poz,next,prev;
int de = 0, sz;
sz = A.size();
A.insert(v);
if (sz == A.size())
return;
poz = A.find(v);
next = poz;
++ next;
prev = poz;
if (*poz > *A.begin())
--prev;
if (next != A.end())
{
Dif.insert( *next - v );
++ de;
}
if (*poz>*A.begin())
{
Dif.insert( v - *prev );
++ de;
}
}
void sterge(int v)
{
set<int>::iterator poz,next,prev;
int de = 0;
poz = A.find(v);
if (poz == A.end())
{
cout << -1 << endl;
return;
}
next = poz;
++ next;
prev = poz;
if (*poz > *A.begin())
--prev;
if (next != A.end())
{
Dif.erase(Dif.find(*next - v));
++ de;
}
if (*poz > *A.begin())
{
Dif.erase(Dif.find(v - *prev));
++ de;
}
if (de == 2)
Dif.insert(*next - *prev);
A.erase(poz);
}
void cauta(int v)
{
cout << A.find(v)!=A.end() << endl;
}
void minim()
{
if (Dif.size() > 0)
cout << *Dif.begin() << endl;
else
cout << -1 << endl;
}
void maxim()
{
set<int>::iterator poz;
if (A.size() > 1)
{
poz = A.end();
-- poz;
cout << *poz-*A.begin() << endl;
}
else
cout << -1 << endl;
}
int main()
{
while (gets(sir))
{
switch (sir[0])
{
case 'I':
{
insert(get_val());
break;
}
case 'S':
{
sterge(get_val());
break;
}
case 'M':
{
if (sir[1]=='I')
minim();
else
maxim();
break;
}
}
}
fclose(stdout);
return 0;
}