Pagini recente » Cod sursa (job #1161877) | Cod sursa (job #1093293) | Cod sursa (job #1721558) | Cod sursa (job #466313) | Cod sursa (job #3135667)
#include <bits/stdc++.h>
using namespace std;
ifstream in("zeap.in");
ofstream out("zeap.out");
set<int> s;
priority_queue<pair<int, pair<int, int>>, vector<pair<int, pair<int, int>>>, greater<pair<int, pair<int, int>>>> zona;
void INS(int x)
{
if (s.count(x)==0)
{
s.insert(x);
if (s.size() >= 2)
{
auto findx = s.find(x);
if (findx != s.begin())
{
findx--;
zona.push({abs(x - *findx), {*findx, x}});
}
findx = s.find(x);
if (findx != s.end())
{
findx++;
zona.push({abs(*findx - x), {*findx, x}});
}
}
}
}
int STERGERE(int x)
{
if (s.count(x)==0)
return -1;
else
{
auto findx = s.find(x), find_urm = findx;
find_urm++;
if (findx == s.begin() || find_urm == s.end())
s.erase(x);
else
{
auto left = findx;
left--;
if (find_urm != s.end() && findx != s.begin())
zona.push({abs(*find_urm - *left), {*left, *find_urm}});
s.erase(x);
}
return 0;
}
}
int CAUTARE(int x)
{
return s.count(x);
}
int MIN_DIFF()
{
if(s.size()>=2)
{
while(s.count(zona.top().second.first) ==0 || s.count(zona.top().second.second) == 0)
zona.pop();
return zona.top().first;
}
return -1;
}
int MAX_DIFF()
{
if (s.size()>=2)
return *s.rbegin()-*s.begin();
return -1;
}
int main() {
string s;
int x;
while (in >> s) {
if (s == "I") {
in >> x;
INS(x);
} else if (s == "S") {
in >> x;
int result = STERGERE(x);
if (result == -1) {
out << result << endl;
}
} else if (s == "C") {
in >> x;
int result = CAUTARE(x);
out << result << endl;
} else if (s == "MIN") {
int result = MIN_DIFF();
out << result << endl;
} else if (s == "MAX") {
int result = MAX_DIFF();
out << result << endl;
}
}
return 0;
}