Pagini recente » Cod sursa (job #117179) | Cod sursa (job #2771186) | Cod sursa (job #1733811) | Cod sursa (job #2356901) | Cod sursa (job #39509)
Cod sursa(job #39509)
// 70 pcte
#include <fstream>
#include <iomanip>
#include <set>
#include <iterator>
#include <vector>
#include <stdio.h>
using namespace std;
#define in "zeap.in"
#define out "zeap.out"
set<long long> s;
set<long long>::iterator it;
set<long long>::iterator it2;
void Add(long long);
void Remove(long long);
void Find(long long);
void Maxim();
void Minim();
long long p=1, n, n2, poz;
long long minim, maxim, h, g, t1, t2, ok;
long long poz1=-1, poz2=-1;
int main()
{
freopen(in,"r",stdin);
freopen(out,"w",stdout);
char c, d, e;
long long k;
while ( scanf("%c",&c) != EOF )
{
if ( c != 'M' )
{
scanf("%lld",&k);
if ( c == 'I' ) Add(k);
if ( c == 'S' ) Remove(k);
if ( c == 'C' ) Find(k);
}
else
{
if ( c == 'M' )
{
scanf("%c%c",&d, &e);
if ( d == 'A' ) Maxim();
else Minim();
}
}
}
}
void Add(long long i)
{
it = s.lower_bound(i);
s.insert(i);
it--;
if ( s.size() >= 1 )
{
if ( poz1 > 0 && poz2 > 0 )
{
if ( minim > *it-i )
{
minim = *it-i;
poz1 = *it;
it2 = s.find(i);
poz2 = *it2;
}
}
++it;
++it;
if ( poz1 > 0 && poz2 > 0 )
{
if ( minim > *it-i )
{
minim = *it-i;
poz1 = *it;
it2 = s.find(i);
poz2 = *it2;
}
}
}
}
void Remove(long long i)
{
if ( s.size() == 0 ) printf("-1\n");
else
{
if ( i == poz1 || i == poz2 ) poz1 = poz2 = -1;
it = s.find(i);
if ( *it == 0 ) printf("-1\n");
else s.erase(s.find(i));
}
}
void Find(long long i)
{
it = s.find(i);
if ( *it == 0 ) printf("0\n");
else printf("1\n");
}
void Maxim()
{
set<long long>::iterator it;
maxim = *s.begin();
it = s.end();
it--;
maxim = abs(*it-maxim);
if ( s.size() >= 2 ) printf("%lld\n",maxim);
else printf("-1\n");
}
void Minim()
{
if ( s.size() >= 2 )
{
if ( poz1 > 0 && poz2 > 0 ) printf("%lld\n",minim);
else
{
minim = 10000000;
it = s.begin();
n = *it;
it++;
n2 = *it;
if ( minim > abs(n-n2) ) minim = abs(n-n2);
ok = 1;
while ( it != s.end() && ok == 1 )
{
if ( abs(*it-n) < minim && *it != n )
{
minim = abs(*it-n);
if ( minim == 1 )
{
ok=0;
poz1 = *it;
poz2 = n;
}
}
n = *it;
it++;
}
printf("%lld\n",minim);
}
}
else printf("-1\n");
}