Pagini recente » Cod sursa (job #2195253) | Cod sursa (job #2920122) | Cod sursa (job #3148036) | Cod sursa (job #558481) | Cod sursa (job #3135607)
#include <iostream>
#include <string>
#include <queue>
#include <set>
#include <fstream>
using namespace std;
ifstream f("zeap.in");
ofstream g("zeap.out");
set<int> Zeap;
priority_queue<pair<int, pair<int, int>>, vector<pair<int, pair<int, int>>>, greater<pair<int, pair<int, int>>>> pq;
void INSERARE(int x)
{
if (Zeap.count(x)==0)
{
Zeap.insert(x);
if (Zeap.size() >= 2)
{
auto findx = Zeap.find(x);
if (findx != Zeap.begin())
{
findx--;
pq.push({abs(x - *findx), {*findx, x}});
}
findx = Zeap.find(x);
if (findx != Zeap.end())
{
findx++;
pq.push({abs(*findx - x), {*findx, x}});
}
}
}
}
int STERGERE(int x)
{
if (Zeap.count(x)==0)
return -1;
else
{
auto findx = Zeap.find(x), find_urm = findx;
find_urm++;
if (findx == Zeap.begin() || find_urm == Zeap.end())
Zeap.erase(x);
else
{
auto left = findx;
left--;
if (find_urm != Zeap.end() && findx != Zeap.begin())
pq.push({abs(*find_urm - *left), {*left, *find_urm}});
Zeap.erase(x);
}
return 0;
}
}
int CAUTARE(int x)
{
return Zeap.count(x);
}
int MIN_DIFF()
{
if(Zeap.size()>=2)
{
while(Zeap.count(pq.top().second.first) ==0 || Zeap.count(pq.top().second.second) == 0)
pq.pop();
return pq.top().first;
}
return -1;
}
int MAX_DIFF()
{
if (Zeap.size()>=2)
return *Zeap.rbegin()-*Zeap.begin();
return -1;
}
int main()
{
string s;
int x;
while (f >> s)
{
if (s == "I")
{
f >> x;
INSERARE(x);
}
else if (s == "S")
{
f >> x;
int result = STERGERE(x);
if(result==-1)
{
g << result << endl;
}
}
else if (s == "C")
{
f >> x;
int result = CAUTARE(x);
g << result << endl;
}
else if (s == "MIN")
{
int result = MIN_DIFF();
g << result << endl;
}
else if (s == "MAX")
{
int result = MAX_DIFF();
g << result << endl;
}
}
return 0;
}