Pagini recente » Cod sursa (job #2276270) | Cod sursa (job #2309521) | Cod sursa (job #2894000) | Cod sursa (job #1743104) | Cod sursa (job #339227)
Cod sursa(job #339227)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
using namespace std;
#define file_in "zeap.in"
#define file_out "zeap.out"
#define Inf 0x3f3f3f3f
set<int> zeap;
multiset<int> z;
int nr;
char s[20];
void insert(int x)
{
set<int> :: iterator it,i1,i2;
if (zeap.size()==0)//nu contine niciun element
{//il inserez
zeap.insert(x);
return ;
}
i2=zeap.lower_bound(x);
if (*i2==x)
return;
i1=i2;
if (i1!=zeap.begin())
--i1;
if (i2!=zeap.end())
z.insert(abs(*i2-x));
if (i1!=i2)
z.insert(abs(*i1-x));
zeap.insert(x);//insereaza
}
void sterge(int x)
{
set<int> :: iterator it,it1,it2;
multiset<int> :: iterator a1,a2;
it=zeap.find(x);
if (it==zeap.end())//nu l-am gasit
{
printf("-1\n");
return;
}
it1=it;
if (it1!=zeap.begin())
--it1;
it2=it;
++it2;
if (it2!=zeap.end())
z.erase(z.find(abs(*it2-x)));
if (it1!=it)
z.erase(z.find(abs(x-*it1)));
if (it2!=zeap.end() && it1!=it)
z.insert(*it2-*it1);
zeap.erase(*it); //sterge
}
void cauta(int x)
{
set<int> :: iterator it;
it=zeap.find(x);
if (it==zeap.end())
printf("0\n");
else
printf("1\n");
}
void max_dif()
{
set<int> :: iterator it,it2;
it=zeap.end();
--it;
it2=zeap.begin();//ultimul-primul
printf("%d\n", *it-*(zeap.begin()));
}
void min_dif()
{
printf("%d\n",*(z.begin()));
}
int main()
{
int i,x;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
//memset(zeap,0,sizeof(zeap));
nr=0;
while(gets(s))
{
//gets(s);
i=0;
if (s[0]=='I')//insert
{
i=2;
x=0;
while(s[i]>='0' && s[i]<='9')
{
x=x*10+s[i]-'0';
i++;
}
insert(x);
}
else
if (s[0]=='S')//sterge
{
i=2;
x=0;
while(s[i]>='0' && s[i]<='9')
{
x=x*10+s[i]-'0';
i++;
}
sterge(x);
//printf("-1\n");
}
else
if (s[0]=='C')//cauta
{
i=2;
x=0;
while(s[i]>='0' && s[i]<='9')
{
x=x*10+s[i]-'0';
i++;
}
//printf("%ld\n", cauta(x));
cauta(x);
}
else
if (s[0]=='M' && s[1]=='A')//max
{
if (zeap.size()<2)
printf("-1\n");
else
//printf("%d\n", max_dif());
max_dif();
}
else
if (s[0]=='M' && s[1]=='I')//min
{
if (zeap.size()<2)
printf("-1\n");
else
//printf("%d\n", min_dif());
min_dif();
}
}
fclose(stdin);
fclose(stdout);
return 0;
}