Pagini recente » Cod sursa (job #2058724) | Cod sursa (job #386280) | Cod sursa (job #1214927) | Cod sursa (job #1245390) | Cod sursa (job #130331)
Cod sursa(job #130331)
#include<cstdio>
#include<set>
using namespace std;
char op[20],*p;
int i,j,x,calc,val;
set<int> s;
multiset<int> dif;
set<int>::iterator i1,i2,i3;
multiset<int>::iterator i4;
using namespace std;
FILE*fin=fopen("zeap.in","r");
inline void valoare(){//fscanf(fin," %d ",&x);
x=0;
p=op+2;
while(*p>='0'&&*p<='9')
{x=x*10+*p-'0';p++;}}
int main()
{freopen("zeap.out","w",stdout);
while(fgets(op,50,fin)){
switch(op[0]){
case 'I':{
valoare();
if(s.find(x)!=s.end()) break;
s.insert(x);
if(s.size()==1) {break;}
i1=s.upper_bound(x);
i2=i1;
i2--;
i3=i2;
if(i3!=s.begin())i3--;
if(i1!=s.end()){
if(i2!=s.begin()) {i4=dif.find(*i1-*i3);dif.erase(i4);}
dif.insert(*i1-*i2);}
if(i2!=s.begin()) dif.insert(*i2-*i3);}break;
case 'S':{
valoare();
i1=s.find(x);
if(i1==s.end()){printf("-1\n");break;}
i3=i2=i1;
if(i1!=s.begin())i1--;
i3++;
if(i2!=s.begin()){
if(i3!=s.end()) dif.insert(*i3-*i1);
i4=dif.find(*i2-*i1);dif.erase(i4);}
if(i3!=s.end()) {i4=dif.find(*i3-*i2);dif.erase(i4);}
s.erase(i2);}break;
case 'C':{
valoare();
if(s.find(x)!=s.end()) printf("1\n");
else printf("0\n");
}break;
case 'M':{
if(s.size()<2) {printf("-1\n");break;}
if(op[1]=='I') printf("%d\n",*dif.begin());
else {
i1=s.end();
i1--;
printf("%d\n",*i1-*s.begin());}
}break;
}
}
fclose(stdout);
return 0;}