Pagini recente » Cod sursa (job #1007962) | Cod sursa (job #2122646) | Cod sursa (job #1235209) | Cod sursa (job #2611515) | Cod sursa (job #2751761)
#include <fstream>
#include <set>
#include <unordered_set>
#include <queue>
#include <utility>
#include <math.h>
using namespace std;
ifstream f("zeap.in");
ofstream g("zeap.out");
set<int> Elemente;
unordered_set<int> Exista_Elem;
priority_queue< pair<int, pair<int, int>> > Dif_Min; // (Dif, (x1, x2))
void INSEREAZA(int x)
{
if(Exista_Elem.find(x) == Exista_Elem.end())
{
int dif;
for(auto it2 = Elemente.begin(); it2 != Elemente.end(); ++it2)
{
dif = abs(*it2 - x);
Dif_Min.push(make_pair(-dif, make_pair(x, *it2)));
}
Elemente.insert(x);
Exista_Elem.insert(x);
}
}
short STERGE(int x)
{
if(Exista_Elem.find(x) == Exista_Elem.end())
return -1;
Elemente.erase(x);
Exista_Elem.erase(x);
return 1;
}
short CAUTA(int x)
{
if(Exista_Elem.find(x) != Exista_Elem.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(Exista_Elem.find(Dif_Min.top().second.first) == Exista_Elem.end() || Exista_Elem.find(Dif_Min.top().second.second) == Exista_Elem.end())
Dif_Min.pop();
return -Dif_Min.top().first;
}
int main()
{
char op[4];
int NR;
f.getline(op, 4);
while(f.good())
{
if(op[0] == 'M')
{
if(op[1] == 'I')
g << MIN_DIF() << '\n';
else
g << MAX_DIF() << '\n';
}
else
{
NR = op[2] - '0';
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.getline(op, 4);
}
return 0;
}