Pagini recente » Cod sursa (job #3277013) | Cod sursa (job #346818) | Cod sursa (job #1942219) | Cod sursa (job #2250163) | Cod sursa (job #2898497)
#include <iostream>
#include <fstream>
#include <queue>
#include <set>
#include <string>
#include <iterator>
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");
set <int> zeap;
priority_queue<pair <int, pair<int, int>>> min_dif;
int make_number(string s)
{
int x = 0, i = 2;
while(s[i])
x = x * 10 + (s[i++] - '0');
return x;
}
void inserare(int x)
{
if(zeap.find(x) == zeap.end())
{
zeap.insert(x);
if(zeap.size() >= 2)
{
auto iterator1 = zeap.find(x), iterator2 = zeap.find(x);
if(iterator1 != zeap.end())
{
iterator1++;
min_dif.push({abs(*iterator1-x)*(-1), {*iterator1, x}});
}
if(iterator2 != zeap.begin())
{
iterator2 --;
min_dif.push({abs(*iterator2-x)*(-1), {*iterator2, x}});
}
}
}
}
void stergere(int x)
{
auto iterator = zeap.find(x);
auto before = iterator, after = iterator;
before --;
after ++;
if (after != zeap.end() and iterator != zeap.begin())
min_dif.push({abs(*after - *before) * (-1), {*before, *after}});
zeap.erase(x);
}
void minim()
{
while(zeap.find(min_dif.top().second.first) == zeap.end() || zeap.find(min_dif.top().second.second) == zeap.end())
min_dif.pop();
fout <<(-1) * min_dif.top().first << "\n";
}
void maxim()
{
auto st = zeap.begin(), dr = zeap.end();
fout<<*(dr--) - *st<<'\n';
}
int main()
{
int x;
string s;
while(getline(fin, s))
{
if(s[0] == 'I')
{
x = make_number(s);
inserare(x);
}
if(s[0] == 'S')
{
x = make_number(s);
if(zeap.find(x) == zeap.end())
fout<<-1<<'\n';
else
stergere(x);
}
if(s[0] == 'C')
{
x = make_number(s);
if(zeap.find(x) == zeap.end())
fout<<0<<'\n';
else
fout<<1<<'\n';
}
if(s == "MIN")
{
if(zeap.size() < 2)
fout<<-1<<'\n';
else
minim();
}
if(s == "MAX")
{
if(zeap.size() < 2)
fout<<-1<<'\n';
else
maxim();
}
}
return 0;
}