Pagini recente » Cod sursa (job #2572350) | Cod sursa (job #1126033) | Cod sursa (job #2808975) | Cod sursa (job #1011835) | Cod sursa (job #2899227)
#include <fstream>
#include <set>
#include <queue>
#include <math.h>
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");
set<int> zeap;
priority_queue< pair<int, pair<int, int>> > dif;
void inserare(int x)
{
if(zeap.find(x) == zeap.end())
{
zeap.insert(x);
auto it = zeap.find(x);
if(it != zeap.begin())
{
auto p= it;
--p;
int d = abs(*it - *p);
dif.push(make_pair(-d, make_pair(*it, *p)));
}
if(it != --zeap.end())
{
auto p = it;
++p;
int d = abs(*p - *it);
dif.push(make_pair(-d, make_pair(*it, *p)));
}
}
}
int stergere(int x)
{
if(zeap.find(x) == zeap.end())
return -1;
auto it = zeap.find(x);
if(it != zeap.begin() && it != --zeap.end())
{
auto p = it;
auto u = it;
--p;
++u;
dif.push(make_pair(-abs(*u - *p), make_pair(*p, *u)));
}
zeap.erase(x);
return 1;
}
bool cautare(int x)
{
if(zeap.find(x) != zeap.end())
return 1;
return 0;
}
int max_dif()
{
if(zeap.size() < 2)
return -1;
return *(--zeap.end()) - *zeap.begin();
}
int min_dif()
{
if(zeap.size() < 2)
return -1;
while(zeap.find(dif.top().second.first) == zeap.end() || zeap.find(dif.top().second.second) == zeap.end())
dif.pop();
return -dif.top().first;
}
int main()
{
int x;
string op;
while(fin >> op)
if(op[1] == 'I')
fout<<min_dif()<<"\n";
else
if(op[1] == 'A')
fout<<max_dif()<<"\n";
else
{
fin >> x;
if(op[0] == 'I')
inserare(x);
else
if(op[0] == 'S' && stergere(x) == -1)
fout <<"-1\n";
else
if(op[0] == 'C')
fout<<cautare(x)<<"\n";
}
return 0;
}