Pagini recente » Cod sursa (job #1754474) | Cod sursa (job #831058) | Cod sursa (job #664092) | Cod sursa (job #2583931) | Cod sursa (job #221830)
Cod sursa(job #221830)
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <set>
#include <cstring>
#include <algorithm>
#define oo 1000100000
using namespace std;
set<int> S;
multiset<int> Q;
void del(int val){
set<int>::iterator it,it1,it2;
multiset<int>::iterator a1,a2;
it=S.find(val);
if (it==S.end()){
printf("-1\n");
return;
}
it1=it;
if (it1!=S.begin())
--it1;
it2=it;
++it2;
if (it1!=it)
Q.erase(Q.find(abs(val-*it1)));
if (it2!=S.end())
Q.erase(Q.find(abs(*it2-val)));
if (it2!=S.end() && it1!=it)
Q.insert(*it2-*it1);
S.erase(*it);
}
void insert(int val){
set<int>::iterator i1,i2,it;
if (S.size()==0){
S.insert(val);
return;
}
i2 = S.lower_bound(val);
if (*i2 == val)
return;
i1 = i2;
if (i1!=S.begin())
--i1;
if (i2!=S.end())
Q.insert(abs(*i2-val));
if (i1!=i2)
Q.insert(abs(*i1-val));
S.insert(val);
}
void search(int val){
set<int>::iterator it;
it=S.find(val);
it==S.end()?printf("0\n"):printf("1\n");
}
void MAX(){
set<int>::iterator it,it2;
if (S.size()<2){
printf("-1\n");
return;
}
it=S.end();--it;
it2=S.begin();//printf("MAX %d %d\n",*it2,*it);
printf("%d\n",*it-*(S.begin()));
}
void MIN(){
set<int>::iterator it1,it2;
if (S.size()<2){
printf("-1\n");
return;
}
printf("%d\n",*(Q.begin()));
}
main(){
char s[30],type;
int val,i;
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
while (gets(s)){
if (strcmp(s,"MAX")==0)
MAX();
else
if (strcmp(s,"MIN")==0)
MIN();
else{
type=s[0];val=0;
for (i=2;s[i]>='0' && s[i]<='9';++i)
val=val*10+s[i]-'0';
if (type=='I')
insert(val);
else
if (type=='S')
del(val);
else
search(val);
}
}
}