Cod sursa(job #1194177)
Utilizator | Data | 3 iunie 2014 01:46:47 | |
---|---|---|---|
Problema | Zeap | Scor | 80 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.18 kb |
#include<fstream>
#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;
int x,a,b;
char c;
int main(){
s.insert(0);
s.insert(inf);
while(fi>>c){
if(c=='I')
{
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);
}
}
else if(c=='S')
{
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";
}
else if(c=='C'){
fi>>x;
if(s.count(x)!=0) fo<<"1\n";
else fo<<"0\n";
}
else{
fi>>c>>c;
if(c=='X')
{
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";
}
}
else if(c=='N')
{
if(s.size()<=3) fo<<"-1\n";
else fo<<*(m_set.begin())<<"\n";
}
}
}
fi.close();
fo.close();
return 0;
}