Pagini recente » Cod sursa (job #2177795) | Cod sursa (job #182824) | Cod sursa (job #2408846) | Cod sursa (job #950981) | Cod sursa (job #70743)
Cod sursa(job #70743)
#include <stdio.h>
#include <fstream>
#include <set>
using namespace std;
#define in "zeap.in"
#define out "zeap.out"
char linie[21];
set<int> p;
set<int>::iterator it, it2;
int minim = 1000000001, g1, g2;
int k = 1;
void Erase(int);
void Search(int);
void Insert(int);
void Minim();
void Maxim();
int main()
{
int j, aux, ok = 1;
FILE *fin = fopen(in,"r");
freopen(out,"w",stdout);
while ( fgets(linie,20,fin) )
{
if ( linie[0] == 'M' )
{
if ( linie[1] == 'A' ) Maxim();
else Minim();
}
else
{
j = 2;
aux=0;
while ( linie[j] >= '0' && linie[j] <= '9' ) aux *= 10, aux += (int)linie[j]-48, j++;
if ( linie[0] == 'I' ) Insert(aux);
if ( linie[0] == 'S' ) Erase(aux);
if ( linie[0] == 'C' ) Search(aux);
}
}
}
void Insert(int aux)
{
p.insert(aux);
if ( p.size() >= 2 )
{
it = p.find(aux);
it2 = it;
if ( it != p.begin() ) it2--;
if ( it != p.begin() && aux != *it2 && abs(aux - *(it2) ) < minim ) minim = abs(aux - *(it2) ), g1 = aux, g2 = *it2, k = 0;
if ( it != p.begin() ) it2++;
if ( it2 != p.end() )
{
it2++;
if ( it2 != p.end() )
{
if ( it2 != p.begin() && aux != *it2 && abs(aux - *(it2) ) < minim ) minim = abs(aux - *(it2) ), g1 = aux, g2 = *it2, k = 0;
}
}
}
}
void Search(int aux)
{
if ( p.size() == 0 ) printf("0\n");
else
{
it = p.find(aux);
if ( it == p.end() ) printf("0\n");
else printf("1\n");
}
}
void Erase(int aux)
{
if ( aux == g1 || aux == g2 ) k = 1, minim = 1000000001;
if ( p.size() == 0 ) printf("-1\n");
else
{
it = p.find(aux);
if ( it == p.end() ) printf("-1\n");
else p.erase( aux );
}
}
void Maxim()
{
if ( p.size() <= 1 ) printf("-1\n");
else
{
int val = 0;
it = p.begin();
val = *it;
it = p.end();
it--;
val = *it-val;
printf("%d\n",val);
}
}
void Minim()
{
if ( p.size() <= 1 ) printf("-1\n");
else
{
if ( k == 0 )
{
printf("%d\n", minim );
}
else
{
minim = 1000000001;
it2 = p.begin();
it2++;
for ( it = p.begin(); it2 != p.end(); it++, it2++ )
{
if ( *it2-*it == 1 )
{
g1 = *it2, g2 = *it;
k = 0;
minim = 1;
break;
}
else if ( *it2-*it < minim ) minim = *it2-*it, g1 = *it2, g2 = *it, k = 0;
}
printf("%d\n", minim);
}
}
}