Pagini recente » Cod sursa (job #3339487) | Cod sursa (job #3333654) | Cod sursa (job #3350184) | Cod sursa (job #3343754) | Cod sursa (job #3349508)
#include <bits/stdc++.h>
#define int long long
#define xmax 1000000000
using namespace std;
ifstream in ("zeap.in");
ofstream out ("zeap.out");
struct zeap{
set <int> s={-67LL*xmax,67LL*xmax};
multiset <int> dif={2*67LL*xmax};
void ins(int x)
{
if (s.find(x)!=s.end())
return;
s.insert(x);
auto poz=s.find(x),pv=prev(poz),nx=next(poz);
dif.erase(dif.find(*nx-*pv));
dif.insert(*poz-*pv);
dif.insert(*nx-*poz);
}
int ers(int x)
{
if (s.find(x)==s.end())
return -1;
auto poz=s.find(x),pv=prev(poz),nx=next(poz);
dif.insert(*nx-*pv);
dif.erase(dif.find(*poz-*pv));
dif.erase(dif.find(*nx-*poz));
s.erase(x);
return 0;
}
bool fnd(int x)
{
return s.find(x)!=s.end();
}
int mx()
{
if (s.size()<4)
return -1;
return *prev(prev(s.end()))-*next(s.begin());
}
int mn()
{
if (s.size()<4)
return -1;
return *dif.begin();
}
}z;
signed main()
{
string s;
while(getline(in,s))
{
stringstream a;
a<<s;
if (s[0]=='I')
{
int x;
char aux;
a>>aux>>x;
z.ins(x);
}
if (s[0]=='S')
{
int x;
char aux;
a>>aux>>x;
if (z.ers(x)==-1)
out<<"-1\n";
}
if (s[0]=='C')
{
int x;
char aux;
a>>aux>>x;
out<<z.fnd(x)<<'\n';
}
if (s.substr(0,3)=="MAX")
{
out<<z.mx()<<'\n';
}
if (s.substr(0,3)=="MIN")
{
out<<z.mn()<<'\n';
}
}
return 0;
}