Pagini recente » Cod sursa (job #1853675) | Cod sursa (job #849139) | Cod sursa (job #40578) | Cod sursa (job #2987336) | Cod sursa (job #614663)
Cod sursa(job #614663)
#include <cstdio>
#include <set>
using namespace std;
set <int> s;
multiset <int> v;
set <int>::iterator it,it1,it2;
int n,i,j,m,nr;
char c[20];
inline int abs(int x){if (x>0) return x;else return -x;}
void i_zeap(int nr)
{
int dif1,dif2;
pair <int, int> p1,p2;
if (s.size()==0)
{
s.insert(nr);
return;
}
it2=s.lower_bound(nr);
if (*it2==nr)
return;
it1=it2;
if (it1!=s.begin())
--it1;
if (it2!=s.end())
{
dif2=abs(*it2 - nr);
v.insert(dif2);
}
if (it1!=it2)
{
dif1=abs(*it1 - nr);
v.insert(dif1);
}
s.insert(nr);
}
int d_zeap(int nr)
{
it=s.find(nr);
if (it==s.end())
return -1;
it1=it;
if (it1!=s.begin())
--it1;
it2=it;
++it2;
if (it2!=s.end())
v.erase(v.find(*it2-nr));
if (it1!=it)
v.erase(v.find(nr-*it1));
if (it2!=s.end()&&it1!=it)
v.insert(*it2-*it1);
s.erase(it);
return 0;
}
int s_zeap(int nr)
{
if (s.find(nr)==s.end())
return 0;
else
return 1;
}
int max_zeap()
{
if (s.size()<2)
return -1;
it=s.end();
--it;
return (*it-(*s.begin()));
}
int min_zeap()
{
if (s.size()<2)
return -1;
return (*v.begin());
}
void r()
{
int i;
nr=0;
for (i=2;c[i]!=0;++i)
nr=nr*10+(c[i]-48);
}
int main()
{
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
while (gets(c))
{
if (c[0]=='I')
{
r();
i_zeap(nr);
}
if (c[0]=='S')
{
r();
if (d_zeap(nr)==-1)
printf("-1\n");
}
if (c[0]=='C')
{
r();
printf("%d\n",s_zeap(nr));
}
if (c[0]=='M')
{
if (c[2]=='X')
printf("%d\n",max_zeap());
else
printf("%d\n",min_zeap());
}
}
return 0;
}