Pagini recente » Cod sursa (job #2740889) | Cod sursa (job #1994582) | Cod sursa (job #969800) | Cod sursa (job #8063) | Cod sursa (job #1153412)
#include<stdio.h>
#include<set>
#include<string.h>
#define MOD1 666019
#define MOD2 12343
using namespace std;
int nr=0;
set<int> hash[MOD1];
set<int> tree;
multiset<int> dif;
set<int>::iterator treeIt,treeIt2,treeIt3;
char cmd[20];
inline bool find(int x)
{
return hash[x%MOD1].find(x%MOD2)!=hash[x%MOD1].end();
}
inline int getNr()
{
int l=strlen(cmd);
int ret=0;
for(int i=2;i<l;++i)
ret=ret*10+cmd[i]-48;
return ret;
}
inline void ins()
{
int x=getNr();
if(find(x))return;
++nr;
hash[x%MOD1].insert(x%MOD2);
treeIt=tree.insert(x).first;
int ok=0;
if(treeIt!=tree.begin())
{
treeIt2=treeIt;
treeIt2--;
dif.insert((*treeIt)-(*treeIt2));
ok++;
}
treeIt3=treeIt;
treeIt3++;
if(treeIt3!=tree.end()){dif.insert((*treeIt3)-(*treeIt));ok++;}
if(ok==2)dif.erase(dif.find((*treeIt3)-(*treeIt2)));
}
inline int del()
{
int x=getNr();
if(nr==0||!find(x))return -1;
--nr;
hash[x%MOD1].erase(x%MOD2);
treeIt=tree.find(x);
int ok=0;
if(treeIt!=tree.begin())
{
treeIt2=treeIt;
treeIt2--;
dif.erase((*treeIt)-(*treeIt2));
ok++;
}
treeIt3=treeIt;
treeIt3++;
if(treeIt3!=tree.end()){dif.erase((*treeIt3)-(*treeIt));ok++;}
if(ok==2)dif.insert((*treeIt3)-(*treeIt2));
tree.erase(x);
return 0;
}
inline bool src()
{
int x=getNr();
if(nr==0||!find(x))return 0;
return 1;
}
inline int mx()
{
if(nr<2)return -1;
treeIt3=tree.end();
treeIt3--;
return (*treeIt3)-(*tree.begin());
}
inline int mn()
{
if(nr<2)return -1;
return *dif.begin();
}
int main()
{
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
gets(cmd);
while(!feof(stdin))
{
if(cmd[0]=='I')ins();
else if(cmd[0]=='S'){int res=del();if(res==-1)printf("-1\n");}
else if(cmd[0]=='C')printf("%d\n",src());
else if(cmd[1]=='A')printf("%d\n",mx());
else printf("%d\n",mn());
gets(cmd);
}
return 0;
}