Pagini recente » Cod sursa (job #1080381) | Cod sursa (job #2959786) | Cod sursa (job #1545758) | Cod sursa (job #793893) | Cod sursa (job #2751819)
#include <fstream>
#include <set>
#include <queue>
#include <utility>
#include <math.h>
using namespace std;
ifstream f("zeap.in");
ofstream g("zeap.out");
set<int> Elemente;
priority_queue< pair<int, pair<int, int>> > Dif_Min; // (Dif, (x1, x2))
void INSEREAZA(int x)
{
if(Elemente.find(x) == Elemente.end())
{
Elemente.insert(x);
auto it = Elemente.find(x);
if(it != Elemente.begin())
{
auto it_prev = it;
--it_prev;
int dif = abs(*it - *it_prev);
Dif_Min.push(make_pair(-dif, make_pair(*it, *it_prev)));
}
if(it != --Elemente.end())
{
auto it_next = it;
++it_next;
int dif = abs(*it_next - *it);
Dif_Min.push(make_pair(-dif, make_pair(*it, *it_next)));
}
}
}
short STERGE(int x)
{
if(Elemente.find(x) == Elemente.end())
return -1;
auto it = Elemente.find(x);
if(it != Elemente.begin() && it != --Elemente.end())
{
auto it_prev = it;
auto it_next = it;
--it_prev;
++it_next;
Dif_Min.push(make_pair(*it_next - *it_prev, make_pair(*it_prev, *it_next)));
}
Elemente.erase(x);
return 1;
}
short CAUTA(int x)
{
if(Elemente.find(x) != Elemente.end())
return 1;
return 0;
}
int MAX_DIF()
{
if(Elemente.size() < 2)
return -1;
return *(--Elemente.end()) - *Elemente.begin();
}
int MIN_DIF()
{
if(Elemente.size() < 2)
return -1;
while(Elemente.find(Dif_Min.top().second.first) == Elemente.end() || Elemente.find(Dif_Min.top().second.second) == Elemente.end())
Dif_Min.pop();
return -Dif_Min.top().first;
}
int main()
{
int NR;
char Op[4];
f >> Op;
while(f.good())
{
if(Op[0] == 'M')
{
if(Op[1] == 'I')
g << MIN_DIF() << '\n';
else
g << MAX_DIF() << '\n';
}
else
{
f >> NR;
if(Op[0] == 'I')
INSEREAZA(NR);
else if(Op[0] == 'S' && STERGE(NR) == -1)
g << -1 << '\n';
else if(Op[0] == 'C')
g << CAUTA(NR) << '\n';
}
f >> Op;
}
return 0;
}