Pagini recente » Cod sursa (job #420173) | Cod sursa (job #1687531) | Cod sursa (job #2277) | Cod sursa (job #1361189) | Cod sursa (job #2899477)
#include <iostream>
#include <fstream>
#include <set>
using namespace std;
ifstream in("zeap.in");
ofstream out("zeap.out");
string cerinta;
set <int> ab;
set<pair<int, pair<int, int>>> v;
void insereaza(int x)
{
//daca elem. nu se gaseste in zeap
if (ab.find(x)==ab.end())
{
ab.insert(x);
auto it=ab.find(x);
//daca exista predecesor in zeap
if (it!=ab.begin())
{
auto st=it;
st--;
v.insert(make_pair(x-*st, make_pair(*st, x)));
}
auto dr=it;
dr++;
if (dr!=ab.end())
v.insert(make_pair(*dr-x, make_pair(x, *dr)));
}
}
void sterge(int x)
{
auto it=ab.find(x);
if(it==ab.end())
{
out<<"-1\n";
return;
}
auto dr=it;
auto st=it;
auto it1=++it;
if (it!=ab.begin() && it1!=ab.end())
{
st--;
dr++;
//adaug stanga lui x-dreapta lui x
v.insert(make_pair(*dr-*st, make_pair(*st, *dr)));
//sterg perechile x-predecesor x, x-succesor x
v.erase(make_pair(x-*st, make_pair(*st, x)));
v.erase(make_pair(*dr-x, make_pair(x, *dr)));
}
else
{
if(it!=ab.begin() && it==ab.end())
v.erase(make_pair(x-*st, make_pair(*st, x)));
else if (it==ab.begin() && it!=ab.end())
v.erase(make_pair(*dr-x, make_pair(x, *dr)));
}
//sterg elementul x
ab.erase(x);
}
void afla_minim()
{
//daca am 0 sau un element in zeap, nu pot sa det. min.
if(ab.size()<=1)
out<<"-1\n";
else
{
//minimul e primul din multimea v, pt ca v e ordonata
out<<(*(v.begin())).first<<'\n';
}
}
void afla_maxim()
{
if (ab.size()<=1)
out<<"-1\n";
else
{
//maximul e diferenta distanta dintre ultimul si primul element
out<<*(--(ab.end()))-*(ab.begin())<<'\n';
}
}
int transformint(string s)
{
int nr=0;
int crt=2;
while(cerinta[crt])
{
nr=nr*10+(cerinta[crt++]-'0');
}
return nr;
}
int main()
{
int x;
while(getline(in, cerinta))
{
if(cerinta[0]=='I')
{
x = transformint(cerinta);
insereaza(x);
}
else
if(cerinta[0]=='S')
{
x = transformint(cerinta);
sterge(x);
}
else
if(cerinta[0]=='C')
{
x=transformint(cerinta);
if(ab.find(x)!=ab.end())
out<<"1\n";
else
out<<"0\n";
}
else
if(cerinta[1]=='I')
afla_minim();
//if(cerinta=="MAX")
else
afla_maxim();
}
return 0;
}