Pagini recente » Cod sursa (job #928595) | Cod sursa (job #559124) | Cod sursa (job #2467989) | Cod sursa (job #1906676) | Cod sursa (job #81564)
Cod sursa(job #81564)
#include <cstdio>
#include <set>
#include <map>
#include <string>
#define lb lower_bound
#define up upper_bound
using namespace std;
set<int>a;
map<int, int> b;
int main()
{
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
char ax[64], *p;
int v;
set<int>::iterator low, up,it;
while(!feof(stdin))
{
memset(ax, 0, sizeof(ax));
fgets(ax, 32, stdin);
//puts(ax);
if(ax[0]=='I')
{
p=strtok(ax, " ");
p=strtok(0, " \n");
v=atoi(p);
a.insert(v);
if(a.size()>=2)
{
low=a.lb(v);
up=a.lb(v);
if(low!=a.begin()) --low;
it=up;
++it;
if(it!=a.end()) ++up;
it=a.find(v);
// printf("%d %d %d---\n",*low, *it, *up);
if(*up-*low>0) {--b[*up-*low]; if(b[*up-*low]==0) b.erase(*up-*low);}
if(*it-*low>0) ++b[*it-*low];
if(*up-*it>0) ++b[*up-*it];
}
}
if(ax[0]=='S')
{
p=strtok(ax, " ");
p=strtok(0, " \n");
v=atoi(p);
it=a.find(v);
if(it==a.end())printf("-1\n");
else
{
if(a.size()>=2)
{
low=a.lb(v);
up=a.lb(v);
if(low!=a.begin()) --low;
it=up;
++it;
if(it!=a.end()) ++up;
it=a.find(v);
// printf("(s %d)\n",*up-*low);
if(*it-*low>0) {--b[*it-*low];if(b[*it-*low]==0) b.erase(*it-*low);}
if(*up-*it>0) {--b[*up-*it]; if(b[*up-*it]==0) b.erase(*up-*it);}
if(*up-*low>0) ++b[*up-*low];
}
a.erase(v);
}
}
if(ax[0]=='C')
{
p=strtok(ax, " ");
p=strtok(0, " \n");
v=atoi(p);
if(a.find(v)==a.end())printf("0\n");
else printf("1\n");
}
if(ax[0]=='M')
{
if(ax[1]=='A')
{
low=a.begin();
up=a.end();
--up;
printf("%d\n", *up-*low);
}
if(ax[1]=='I')
{
map<int, int>::iterator itt;
for(itt=b.begin();itt!=b.end();++itt)
if(itt->second>=0){printf("%d\n", itt->first); break;}
/*
if(b.size())
{
itt=b.begin();
printf("%d\n", itt->first);
}
*/
}
}
//printf("map:\n");
// for(map<int, int>:: iterator itt=b.begin();itt!=b.end();++itt)printf("(%d %d)", itt->first, itt->second);
//printf("endmap\n");
}
return 0;
}