Pagini recente » Cod sursa (job #3292826) | Cod sursa (job #2899206)
#include <iostream>
#include <fstream>
#include <set>
#include <string>
using namespace std;
#define MAX INT32_MAX
ifstream in("zeap.in");
ofstream out("zeap.out");
set<int> zeap;
pair<int, pair<int, int>> mindif;
string input;
int num;
void insert()
{
in >> num;
if (zeap.find(num) == zeap.end())
{
zeap.insert(num);
auto it = zeap.find(num);
if (it != zeap.begin())
{
auto stg = prev(it);
if (num - *stg < mindif.first)
{
mindif.first = num - *stg;
mindif.second.first = num;
mindif.second.second = *stg;
}
}
if (it != --zeap.end())
{
auto dr = next(it);
if (*dr - num < mindif.first)
{
mindif.first = *dr - num;
mindif.second.first = *dr;
mindif.second.second = num;
}
}
}
}
void sterge()
{
in >> num;
auto it = zeap.find(num);
if (it == zeap.end())
out << "-1\n";
else
{
if (num == mindif.second.first || num == mindif.second.second)
{
mindif.first = MAX;
mindif.second = {-1, -1};
}
zeap.erase(num);
}
}
void cauta()
{
in >> num;
if (zeap.find(num) == zeap.end())
out << "0\n";
else
out << "1\n";
}
void maxdif()
{
if (zeap.size() < 2)
out << "-1\n";
else
out << *(--zeap.end()) - *(zeap.begin()) << '\n';
}
void min_dif()
{
if (zeap.size() < 2)
out << "-1\n";
else
{
if (mindif.first == MAX)
{
for (auto it = ++zeap.begin(); it != zeap.end(); it++)
{
if (*it - *prev(it) < mindif.first)
{
mindif.first = *it - *prev(it);
mindif.second.first = *it;
mindif.second.second = *prev(it);
}
}
}
out << mindif.first << '\n';
}
}
int main()
{
mindif.first = MAX;
mindif.second = {-1, -1};
while (in >> input)
{
if (input == "I")
insert();
if (input == "S")
sterge();
if (input == "C")
cauta();
if (input == "MAX")
maxdif();
if (input == "MIN")
min_dif();
}
return 0;
}