Pagini recente » Cod sursa (job #623414) | Cod sursa (job #1573152) | Cod sursa (job #1953789) | Cod sursa (job #1424051) | Cod sursa (job #930076)
Cod sursa(job #930076)
#include<fstream>
#include<set>
#include<algorithm>
#include<cstring>
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");
set<int> v;
set<int>::iterator it1,it2,it3,it;
char x[20];
int n;
int minim=(1<<30),code,val;
char *p;
inline void min_find()
{
minim=(1<<30);
if(v.size()<2)
return;
set<int>::iterator it1,it2;
it1=it2=v.begin();
it1++;
for(;it1!=v.end();it1++,it2++)
if(minim>(*it1)-(*it2))
{
minim=(*it1)-(*it2);
val=(*it2);
}
}
void decode()
{
if(x[0]=='M')
{
code=4;
return;
}
if(x[0]=='I')
code=1;
if(x[0]=='S')
code=2;
if(x[0]=='C')
code=3;
p=strchr(x,' ');
n=atoi(p+1);
}
int main()
{
while(fin.getline(x,20))
{
if(v.size()==2 && code<=2)
min_find();
decode();
if(code==1)
{
pair<set<int>::iterator,bool> is;
is=v.insert(n);
if(is.second && v.size()>2)
{
it3=is.first;
int d1=(1<<30),d2=(1<<30);
if(it3==v.begin())
{
it2=it3++;
d2=(*it3)-(*it2);
if(minim>d2)
{
minim=d2;
val=(*it2);
}
continue;
}
it2=it3++;
it1=--it2;
it2++;
if(it3==v.end())
{
d1=(*it2)-(*it1);
if(minim>d1)
{
minim=d1;
val=(*it1);
}
continue;
}
d1=(*it2)-(*it1);
d2=(*it3)-(*it2);
if(d1<=d2)
{
d2=d1;
it2=it1;
}
if(minim>d2)
{
minim=d2;
val=(*it1);
}
}
continue;
}
if(code==2)
{
if(v.empty())
{
fout<<-1<<'\n';
continue;
}
it=v.end();
it2=v.find(n);
it--;
if(it2!=v.end())
{
if(v.size()<2)
{
v.erase(it2);
continue;
}
if(it2==it)
{
it1=--it2;
it2++;
if(val==(*it1))
{
v.erase(it2);
min_find();
}
else
v.erase(it2);
continue;
}
it3=++it2;
it2--;
if(it2==v.begin())
{
if(val==(*it2))
{
v.erase(it2);
min_find();
}
else
v.erase(it2);
continue;
}
it1=--it2;
it2++;
if(val==(*it1) || val==(*it2))
{
v.erase(it2);
min_find();
}
else
v.erase(it2);
}
else
fout<<-1<<'\n';
continue;
}
if(code==3)
{
fout<<(v.find(n)!=v.end())<<'\n';
continue;
}
if(code==4)
{
if(v.size()<2)
{
fout<<-1<<'\n';
continue;
}
if(x[1]=='A')
{
it1=v.end();
it1--;
it2=v.begin();
fout<<(*it1)-(*it2)<<'\n';
}
else
fout<<minim<<'\n';
}
}
fin.close();
fout.close();
return 0;
}