Pagini recente » Cod sursa (job #2712674) | Istoria paginii info-oltenia-2019/individual/solutii | Cod sursa (job #438373) | Cod sursa (job #721110) | Cod sursa (job #900886)
Cod sursa(job #900886)
#include<stdio.h>
#include<set>
#include<map>
using namespace std;
set<int> h;
map<int,int> m;
void add(int x)
{
set<int>::iterator pos,prev,next;
if(h.empty())
{
h.insert(x);
return;
}
h.insert(x);
pos=h.find(x);
next=pos; ++next;
prev=pos; --prev;
if(pos==h.begin())
{
++m[*next - *pos];
return;
}
if(next==h.end())
{
++m[*pos - *prev];
return;
}
if(--m[*next - *prev]==0)
m.erase(*next - *prev);
++m[*next - *pos];
++m[*pos - *prev];
}
void del(int x)
{
set<int>::iterator pos,next,prev;
pos=h.find(x);
if(h.empty() || pos==h.end())
{
printf("-1\n");
return;
}
next=pos; ++next;
prev=pos; --prev;
if(pos==h.begin() && next==h.end())
{
h.erase(x);
return;
}
if(pos==h.begin())
{
if(--m[*next - *pos]==0)
m.erase(*next - *pos);
return;
}
if(next==h.end())
{
if(--m[*pos - *prev]==0)
m.erase(*pos - *prev);
return;
}
if(--m[*next - *pos]==0)
m.erase(*next - *pos);
if(--m[*pos - *prev]==0)
m.erase(*pos - *prev);
++m[*next - *pos];
h.erase(pos);
}
void caut(int x)
{
set<int>::iterator pos;
pos=h.find(x);
if(pos==h.end())
{
printf("0\n");
return;
}
printf("1\n");
}
void max()
{
int min,max;
min=*h.begin();
max=*h.rbegin();
printf("%d\n",max-min);
}
void min()
{
printf("%d\n",m.begin()->first);
}
void rezolv()
{
char s[50];
int x,i;
while(fgets(s,50,stdin))
{
if(s[0]=='M')
{
if(h.size()<2)
{
printf("-1\n");
continue;
}
if(s[1]=='A')
max();
else
min();
}
else
{
x=0;
for(i=2;s[i]!='\n'&&s[i]!=0;++i)
x=x*10+s[i]-'0';
if(s[0]=='I')
{
add(x);
continue;
}
if(s[0]=='C')
{
caut(x);
continue;
}
del(x);
}
}
}
int main()
{
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
rezolv();
fclose(stdin);
fclose(stdout);
return 0;
}