Cod sursa(job #129161)
Utilizator | Data | 28 ianuarie 2008 18:22:43 | |
---|---|---|---|
Problema | Zeap | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.08 kb |
#include <stdio.h>
#include <set>
using namespace std;
set<int> T;
multiset<int> D;
char S[22];
int N;
void scrie()
{
set<int>::iterator i;
printf("--->");
for (i = D.begin(); i != D.end(); i++)
printf("%d ", *i);
printf("\n");
}
int main()
{
set<int> :: iterator p, t;
int i, j, a, x, n = 0;
freopen("zeap.in", "r", stdin);
freopen("zeap.out", "w", stdout);
while (gets(S))
{
if (S[0] == 'I')
{
a = 0;
for (i = 2; i < strlen(S); i++) a = a*10+S[i]-48;
T.insert(a);
p = T.find(a);
N += (p!=T.end());
if (n < N)
{
t = p;
i = *(--T.end());
if (a < i) {i = *(++p); D.insert(abs(i-a)); /*scrie();*/}
i = *T.begin();
if (a > i) {i = *(--t); D.insert(abs(i-a)); /*scrie();*/}
}
}
else
if (S[0] == 'S')
{
a = 0;
for (i = 2; i < strlen(S); i++) a = a*10+S[i]-48;
p = T.find(a);
if (p != T.end())
{
x = *(--T.end());
t = p;
if (a < x) {i = *(++p); D.erase(D.find(abs(i-a))); /*scire();*/}
x = *T.begin();
if (a > x) {j = *(--t); D.erase(D.find(abs(j-a))); /*scire();*/}
T.erase(a);
N--;
D.insert(abs(i-j));
}
else printf("-1\n");
}
else
if (S[0] == 'C')
{
a = 0;
for (i = 2; i < strlen(S); i++) a = a*10+S[i]-48;
printf("%d\n", (T.find(a) != T.end()));
}
else
if (S[0] == 'M' && S[1] == 'I')
{
a = *D.begin();
if (N > 1) printf("%d\n", a);
else printf("-1\n");
}
else
{
if (N > 1)
{
p = T.end();
a = *(--p)-*T.begin();
printf("%d\n", a);
}
else printf("-1\n");
}
n = N;
}
return 0;
}