Pagini recente » Statistici Matcasu Malina (Malina2002) | Cod sursa (job #283569) | Statistici Cristea Petru Theodor (petru.theodor) | Monitorul de evaluare | Cod sursa (job #1253419)
#include <fstream>
#include <cstring>
#include <iostream>
#include <set>
#define sint set<int>::iterator
using namespace std;
ifstream fin("zeap.in");
ofstream fout ("zeap.out");
char s[1<<22];
int p,n,x,y,op,z;
int get_op ()
{
p+=2;
if (s[p-1] == 'I')
return 1;
if (s[p-1] == 'S')
return 2;
if (s[p-1] == 'C')
return 3;
p +=2;
if (s[p-2] == 'A')
return 4;
if (s[p-2] == 'I')
return 5;
return 6;
}
int get_int()
{
++p;
int x = 0;
while (p < n && s[p] != ' ' && s[p] != '\n')
{
x = x*10+(s[p]-'0');
++p;
}
return x;
}
int main()
{
FILE *file = fopen ("zeap.in","r");
fread (s,1,(1<<22),file);
n = strlen(s);
set <int> S;
multiset <int> dif;
p = -1;
while (p < n)
{
op = get_op ();
if (op == 6)
break;
if (op == 1)
{
x = get_int ();
if (S.find(x) != S.end())
continue;
sint it1 = S.lower_bound (x);
if (it1 == S.begin())
{
it1 = S.end();
}
else
{
--it1;
dif.insert (x-*it1);
}
sint it2 = S.upper_bound (x);
if (it2 != S.end())
{
dif.insert (*it2-x);
}
if (it1 != S.end() && it2 != S.end())
dif.erase (*it2-*it1);
S.insert (x);
}
else if (op == 2)
{
x = get_int ();
if (S.find (x) == S.end())
fout<<-1<<"\n";
else
{
sint it1 = S.lower_bound (x);
if (it1 == S.begin())
{
it1 = S.end();
}
else
{
--it1;
dif.erase (x-*it1);
}
sint it2 = S.upper_bound (x);
if (it2 != S.end())
{
dif.erase (*it2-x);
}
if (it1 != S.end() && it2 != S.end())
dif.insert (*it2-*it1);
S.erase (x);
}
}
else if (op == 3)
{
x = get_int();
sint it = S.find (x);
if (it != S.end())
fout<<1;
else fout<<0;
fout<<"\n";
}
else if (op == 4)
{
if (S.size() < 2)
{
fout<<-1<<"\n";
}
else
{
sint it = S.end();
--it;
fout<<*it-*S.begin()<<"\n";
}
}
else
{
if (S.size() < 2)
{
fout<<-1<<"\n";
}
else fout<<*dif.begin()<<"\n";
}
}
}