Pagini recente » Cod sursa (job #79373) | Cod sursa (job #1061810) | Cod sursa (job #2780808) | Cod sursa (job #674209) | Cod sursa (job #167115)
Cod sursa(job #167115)
using namespace std;
#include <stdio.h>
#include <string.h>
#include <set>
char sir[20];
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;
poz=A.find(v);
if (poz!=A.end()) return;
A.insert(v);
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; }
if (de==2) Dif.erase(Dif.find( *next - *prev ) );
}
void sterge(int v)
{
set<int>::iterator poz,next,prev;
int de=0;
poz=A.find(v);
if (poz==A.end()) { printf("-1\n"); 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 );
// printf("%d\n",*(++poz)-*(--poz));
A.erase(poz);
}
void cauta(int v) { printf("%d\n",A.find(v)!=A.end()); }
void minim()
{
if (Dif.size()>0) printf("%d\n",*Dif.begin());
else printf("-1\n");
}
void maxim()
{
set<int>::iterator poz;
if (A.size()>0)
{
poz=A.end(); --poz;
printf("%d\n",*poz-*A.begin());
}
else printf("-1\n");
}
int main()
{
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
while (gets(sir))
{
switch (sir[0])
{
case 'I': {
insert(get_val());
break;
}
case 'S': {
sterge(get_val());
break;
}
case 'C': {
cauta(get_val());
break;
}
case 'M': {
if (sir[1]=='I') minim();
else maxim();
break;
}
}
}
fclose(stdout);
return 0;
}