Pagini recente » Cod sursa (job #1087751) | prosoft-2016/clasament/10 | Cod sursa (job #1508043) | Cod sursa (job #649439) | Cod sursa (job #2899469)
#include <bits/stdc++.h>
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)
{
zeap.insert(x);
auto iterator = zeap.find(x);
if(iterator != zeap.end())
{
auto before = iterator, after = iterator;
before--;
after++;
min_dif.push({-abs(*iterator - *before), {*iterator, *before}});
min_dif.push({-abs(*iterator - *after), {*iterator, *after}});
}
}
void stergere(int x)
{
auto iterator = zeap.find(x);
if(zeap.find(x) == zeap.end())
fout<<-1<<'\n';
else
{
auto after = iterator;
after ++;
min_dif.push({-abs(*after - *iterator), {*after, *iterator}});
zeap.erase(x);
}
}
void minim()
{
while (!min_dif.empty() && ((min_dif.top().first == 0) || (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";
}
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);
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
fout<<*(--zeap.end()) - *(zeap.begin())<<'\n';
}
}
return 0;
}