Cod sursa(job #1310217)
Utilizator | Data | 6 ianuarie 2015 16:35:18 | |
---|---|---|---|
Problema | Zeap | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.58 kb |
#include <iostream>
#include <vector>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <queue>
#include <set>
#include <map>
#include <fstream>
#include <cstdlib>
#include <string>
#include <cstring>
#include <algorithm>
#include <numeric>
#define ll long long int
#define punct pair<ll,ll>
#define MOD 10000007
using namespace std;
int x,t1,t2;
pair<int,int> pa;
ifstream f("zeap.in");
ofstream g("zeap.out");
int main()
{
ios_base::sync_with_stdio(false);
string s;
map<int,int> M,dif;
map<int,int>::iterator it,itt;
map<int,set<int> > mem;
set<int> v;
while(f>>s)
{
if (s == "I")
{
f>>x;
M[x]=1;
it=M.find(x);
if (it != M.begin() && it != M.end())
{
++it;
if (it != M.end())
{
dif[abs(x-it->first)]++;
mem[x].insert(it->first);
mem[it->first].insert(x);
}
--it;--it;
if (it->first >= M.begin()->first)
{
dif[abs(x-it->first)]++;
mem[x].insert(it->first);
mem[it->first].insert(x);
}
}
}
else if (s == "S")
{
f>>x;
if (!M[x])
{g<<-1<<'\n';continue;}
M.erase(x);
v=mem[x];
for (set<int>::iterator it=v.begin();it!=v.end();++it)
{
dif[abs(*it-x)]--;
mem[*it].erase(x);
if (it != v.begin() && v.size() > 1)
{
++dif[abs(*it- *--it)];
mem[*it].insert(*++it);
mem[*it].insert(*--it);
++it;
}
}
mem[x].clear();
mem.erase(x);
}
else if (s == "C")
{
f>>x;
if(M[x])
g<<1<<'\n';
else g<<0<<'\n';
}
else if (s == "MAX")
{
if (M.size()<2)
{
g<<-1<<'\n';
continue;
}
it=M.begin();
itt=M.end();
--itt;
if (it!=itt )
g<<abs(it->first-itt->first)<<'\n';
}
else if (s == "MIN")
{
it=dif.begin();
while(!it->second)
{
dif.erase(it);
it=dif.begin();
}
if (dif.begin()!=dif.end())
g<<dif.begin()->first<<'\n';
else g<<-1<<'\n';
}
}
return 0;
}