Pagini recente » Cod sursa (job #1097032) | Cod sursa (job #136206) | Cod sursa (job #891193) | Cod sursa (job #2240270) | Cod sursa (job #1525497)
#include <cstdio>
#include <set>
#include <map>
FILE* in=fopen("zeap.in","r");
FILE* out=fopen("zeap.out","w");
///parsare
bool digit[200];
bool letter[200];
void jibril()
{
for(int i='0'; i<='9'; i++)
digit[i]=1;
for(int i='A'; i<='Z'; i++)
letter[i]=1;
}
const int SBUF=4096;
char BUF[SBUF];
int pbuf=SBUF;
char get_char()
{
if(pbuf==SBUF)
{
pbuf=0;
fread(BUF,SBUF,1,in);
}
return BUF[pbuf++];
}
bool get_string(char v[])
{
char x;
x=get_char();
int cont=0;
while(!letter[x] && cont<5)
{
x=get_char();
cont++;
}
if(cont==5)
return 0;
int p=0;
while(letter[x])
{
v[p++]=x;
x=get_char();
}
v[p]=0;
return 1;
}
int get_int()
{
int rez=0;
char x=get_char();
while(!digit[x])
x=get_char();
while(digit[x])
{
rez=rez*10+x-'0';
x=get_char();
}
return rez;
}
///parsare
std::set<int> s;
std::multiset<unsigned int> m;
const int INF=2000000002;
int main()
{
jibril();
char v[20];
s.insert(-INF/2);
s.insert(INF);
m.insert((unsigned int) (INF+INF/2));
std::set<int>::iterator it;
std::multiset<unsigned int>::iterator itmap;
int x;
while(fscanf(in,"%s",v)==1)
{
if(v[0]=='I')
{
//int x=get_int();
fscanf(in,"%d",&x);
it=s.upper_bound(x);
it--;
if(*it!=x)
{
it++;
int v1,v2;
v2=*it;
it--;
v1=*it;
itmap=m.upper_bound((unsigned int)(v2-v1) );
itmap--;
m.erase(itmap);
s.insert(x);
m.insert((unsigned int) (v2-x));
m.insert((unsigned int) (x-v1));
}
}
else if(v[0]=='S')
{
// int x=get_int();
fscanf(in,"%d",&x);
it=s.upper_bound(x);
it--;
if(*it==x)
{
int v1,v2;
it++;
v2=*it;
it--;
it--;
v1=*it;
it++;
s.erase(it);
itmap=m.upper_bound( (unsigned int) (v2-x));
itmap--;
m.erase(itmap);
itmap=m.upper_bound((unsigned int) (x-v1));
itmap--;
m.erase(itmap);
m.insert((unsigned int) (v2-v1));
}
else
{
fprintf(out,"-1\n");
}
}
else if(v[0]=='C')
{
// int x=get_int();
fscanf(in,"%d",&x);
it=s.upper_bound(x);
it--;
if(*it==x)
{
fprintf(out,"1\n");
}
else
{
fprintf(out,"0\n");
}
}
else if(v[0]=='M' && v[1]=='A')
{
if(s.size()<4)
fprintf(out,"-1\n");
else
{
int rez=0;
it=s.end();
it--;
it--;
rez=*it;
it=s.begin();
it++;
rez-=*it;
fprintf(out,"%d\n",rez);
}
}
else if(v[0]=='M' && v[1]=='I')
{
if(s.size()<4)
fprintf(out,"-1\n");
else
{
itmap=m.begin();
fprintf(out,"%d\n",*itmap);
}
}
else
break;
}
return 0;
}