Cod sursa(job #786705)
Utilizator | Data | 11 septembrie 2012 21:10:34 | |
---|---|---|---|
Problema | Zeap | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.59 kb |
#include <cstdio>
#include <set>
#include <map>
#include <algorithm>
#include <iterator>
#include <cstdlib>
using namespace std;
set<int> s;
map<int , int> m;
set<int>::iterator it, aux;
map<int , int>::iterator mit;
char sir[20]; int nr;
int main()
{
freopen("zeap.in", "r", stdin);
freopen("zeap.out", "w", stdout);
while(gets(sir))
{
switch(sir[0])
{
case 'I':
{
nr = atoi(sir + 2);
if(!s.count(nr))
{
s.insert(nr);
it = s.upper_bound(nr);
if(it != s.end())
m[*it - nr]++;
--it;
if(it != s.begin())
{
--it;
m[nr - *it]++;
}
}
break;
}
case 'S':
{
nr = atoi(sir + 2);
if(s.count(nr))
{
it = s.upper_bound(nr);
aux = s.end();
if(it != s.end())
{
m[*it - nr]--;
if(!m[*it - nr]) m.erase(*it - nr);
aux = it;
}
--it;
if(it != s.begin())
{
--it;
m[nr - *it]--;
if(!m[nr - *it]) m.erase(nr - *it);
if(aux != s.end())
m[*aux - *it]++;
}
s.erase(nr);
}
else
printf("-1\n");
break;
}
case 'C':
{
nr = atoi(sir + 2);
printf("%d\n", s.count(nr));
break;
}
default:
{
if(s.size() < 2)
{
printf("-1\n");
break;
}
if(sir[1] == 'A')
{
it = s.begin(), aux = s.end();
--aux;
printf("%d\n", *aux - *it);
}
else
{
mit = m.begin();
printf("%d\n", mit->first);
}
break;
}
}
}
fclose(stdin);
fclose(stdout);
return 0;
}