Pagini recente » Cod sursa (job #2999441) | Cod sursa (job #2261234) | Cod sursa (job #2576451) | Cod sursa (job #751739) | Cod sursa (job #2751801)
#include <fstream>
#include <set>
#include <queue>
#include <unordered_set>
#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())
{
int dif;
for(auto it2 = Elemente.begin(); it2 != Elemente.end(); ++it2)
{
int x1 = x, x2 = *it2;
if(x1 > x2)
swap(x1, x2);
dif = abs(x2 - x1);
Dif_Min.push(make_pair(-dif, make_pair(x1, x2)));
}
Elemente.insert(x);
}
}
short STERGE(int x)
{
if(Elemente.find(x) == Elemente.end())
return -1;
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;
}