Pagini recente » Cod sursa (job #2224955) | Cod sursa (job #844484) | Cod sursa (job #2352298) | Cod sursa (job #2363848) | Cod sursa (job #180597)
Cod sursa(job #180597)
using namespace std;
#include <set>
#include <multiset.h>
#include <cstdio>
#include <cstdlib>
set<int>a ;
multiset<int>dif;
int main()
{
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
char ax[64];
char *p;
int v;
set<int>::iterator it,it2,it3;
multiset<int>::iterator It;
while(!feof(stdin))
{
memset(ax, 0, sizeof(ax));
gets(ax);
// printf("%s\n", ax);
if(ax[0]=='I')
{
// printf("insert\n");
p=strtok(ax, " ");
p=strtok(0, " \n");
v=atoi(p);
if(a.size()<2){ a.insert(v); if(a.size()==2) { it=a.end();--it; dif.insert(*it-*a.begin());}}
else
{
it=a.lower_bound(v);
it2=it;
if(it2!=a.begin())--it2;
if(it!=a.end()) dif.insert((*it)-v);
if(it2!=it) dif.insert(v-(*it2));
a.insert(v);
}
}
else
if(ax[0]=='S')
{
// printf("delete\n");
p=strtok(ax, " ");
p=strtok(0, " \n");
v=atoi(p);
it=a.find(v);
if(it==a.end()) { printf("-1\n"); continue;}
if(a.size()==1) { a.erase(v); continue;}
if(a.size()==2){ dif.clear(); a.erase(v);continue;}
it2=it;
++it2;
it3=it;
if(it3!=a.begin())--it3;
if(it2!=a.end())
{
int t=*it2 - v;
It=dif.find(t);
dif.erase(It);
}
if(it3!=it)
{
int t=v - *it3;
It=dif.find(t);
dif.erase(It);
}
if(it2!=a.end() && it3!=it)
dif.insert(*it2 - *it3);
a.erase(v);
}
else
if(ax[0]=='C')
{
// printf("find\n");
p=strtok(ax, " ");
p=strtok(0, " \n");
v=atoi(p);
if(a.find(v) != a.end()) printf("1\n");
else printf("0\n");
}
else
if(ax[0]=='M' && ax[1]=='A' && ax[2]=='X')
{
// printf("max\n");
if(a.size()<2) printf("-1\n");
else
{
it=a.end();
--it;
it2=a.begin();
// printf("da?\n");
printf("%d\n", *it - *it2);
}
}
else
if(ax[0]=='M' && ax[1]=='I' && ax[2]=='N')
{
// printf("min\n");
if(a.size()<2) printf("-1\n");
else
printf("%d\n", *dif.begin());
}
/*
printf("___\n");
for(it=a.begin();it!=a.end();++it)printf("%d ", *it);
printf("\n");
for(It=dif.begin();It!=dif.end();++It)printf("%d ", *It);
printf("\n");
printf("____\n");
*/
}
return 0;
}