Pagini recente » Cod sursa (job #405215) | Cod sursa (job #747129) | Cod sursa (job #3125924) | Cod sursa (job #2510968) | Cod sursa (job #613552)
Cod sursa(job #613552)
#include <cstdio>
#include <cstring>
#include <set>
using namespace std;
multiset <int> v;
set <int> s;
set <int>::iterator it,it1,it2;
inline int abs(int v){if (v>0) return v;else return -v;}
void i_zeap(int x)
{
int d1,d2;
pair <int,int> p1,p2;
if (s.size()==0)
{
s.insert(x);
return;
}
it2=s.lower_bound(x);
if (*it2==x)
return;
it1=it2;
if (it1!=s.begin())
--it1;
if (it2!=s.end())
{
d2=abs(*it2-x);
v.insert(d2);
}
if (it1!=it2)
{
d1=abs(*it1-x);
v.insert(d1);
}
s.insert(x);
}
int d_zeap(int x)
{
it=s.find(x);
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 - x));
if (it1 != it)
v.erase(v.find(x-*it1));
if (it2!=s.end()&&it1!=it)
v.insert(*it2-*it1);
s.erase(it);
return 0;
}
int s_zeap(int x)
{
return s.find(x)!=s.end();
}
int max_zeap()
{
if (s.size()<2)
return -1;
it=s.end();
--it;
return *it-(*s.begin());
}
int min_zeap()
{
if (s.size()<2)
if (s.size()<2)
return -1;
return *v.begin();
}
int main()
{
char ch[20];
int i,x,aux;
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
while (!feof(stdin))
{
fgets(ch,sizeof(ch),stdin);
aux=strlen(ch);
for(i=2,x=0;i<aux-1;++i)
x=x*10+(ch[i]-48);
if (ch[0]=='I')
i_zeap(x);
else if (ch[0]=='S')
{
if (d_zeap(x)==-1)
printf("-1\n");
}
else if (ch[0]=='C')
printf("%d\n", s_zeap(x));
else if (ch[1]=='A')
printf("%d\n",max_zeap());
else
printf("%d\n",min_zeap());
}
return 0;
}