Pagini recente » Cod sursa (job #678539) | Cod sursa (job #2630707) | Cod sursa (job #73221) | Cod sursa (job #56342) | Cod sursa (job #1194172)
#include<fstream>
#include<string>
#include<set>
using namespace std;
ifstream fi("zeap.in");
ofstream fo("zeap.out");
const int inf = (1LL<<31)-1;
multiset <int> m_set;
set <int>::iterator it;
set <int> s;
string sir;
void inserare(){
int x,a,b;
fi>>x;
if(s.count(x)==0){
s.insert(x);
it=s.find(x);
it--;
a=*it;
it++;
it++;
b=*it;
if(a>0) m_set.insert(x-a);
if(b<inf) m_set.insert(b-x);
if(a>0 && b<inf) m_set.insert(b-a);
}
}
void stergere(){
int x,a,b;
fi>>x;
if(s.count(x)!=0){
it=s.find(x);
it--;
a=*it;
it++;
it++;
b=*it;
it--;
if(a>0) m_set.erase(m_set.find(x-a));
if(b<inf) m_set.erase(m_set.find(b-x));
if(a>0 && b<inf) m_set.insert(b-a);
s.erase(it);
}
else fo<<"-1\n";
}
void cautare(){
int x;
fi>>x;
if(s.count(x)!=0) fo<<"1\n";
else fo<<"0\n";
}
void max_dif(){
int a,b;
if(s.size()<=3) fo<<"-1\n";
else{
it=s.end();
it--;
it--;
a=*it;
it=s.begin();
it++;
b=*it;
fo<<a-b<<"\n";
}
}
void min_dif(){
if(s.size()<=3) fo<<"-1\n";
else fo<<*(m_set.begin())<<"\n";
}
int main(){
s.insert(0);
s.insert(inf);
while(fi>>sir){
if(sir=="I") inserare();
else if(sir=="S") stergere();
else if(sir=="C") cautare();
else if(sir=="MAX") max_dif();
else if(sir=="MIN") min_dif();
}
fi.close();
fo.close();
return 0;
}