Pagini recente » Cod sursa (job #666782) | Cod sursa (job #609659) | Cod sursa (job #3197565) | Cod sursa (job #314961) | Cod sursa (job #2750567)
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pereche;
ifstream fin("zeap.in");
ofstream gout("zeap.out");
priority_queue <pair<int, pereche>, vector<pair<int, pereche>>, greater<pair<int, pereche>>> coada_cu_prioritati;
set <int> zeap;
string operatie;
void insereaza(int x)
{
if(zeap.count(x) == 0)
{
zeap.insert(x);
if(zeap.size() >= 2)
{
auto index_x = zeap.find(x);
if(index_x != zeap.begin())
{
auto index_stanga = index_x;
--index_stanga;
coada_cu_prioritati.push({abs(*index_stanga - x), {*index_stanga, x}});
}
auto index_dreapta = index_x;
++index_dreapta;
if(index_dreapta != zeap.end())
coada_cu_prioritati.push({abs(x - *index_dreapta), {x, *index_dreapta}});
}
}
}
int sterge(int x)
{
if(zeap.count(x) == 0)
return -1;
auto index_x = zeap.find(x);
auto index_dreapta = index_x;
++index_dreapta;
auto index_stanga = index_x;
--index_stanga;
if(index_dreapta != zeap.end() and index_x != zeap.begin())
coada_cu_prioritati.push({abs(*index_stanga - *index_dreapta), {*index_stanga, *index_dreapta}});
zeap.erase(x);
return 1;
}
bool cauta(int x)
{
if(zeap.count(x))
return 1;
return 0;
}
int max_dif()
{
if(zeap.size() < 2)
return -1;
auto sfarsit = zeap.end();
--sfarsit;
auto inceput = zeap.begin();
return *sfarsit - *inceput;
}
int min_dif()
{
if(zeap.size() < 2)
return -1;
while(zeap.count(coada_cu_prioritati.top().second.first) == 0 or
zeap.count(coada_cu_prioritati.top().second.second) == 0)
coada_cu_prioritati.pop();
return coada_cu_prioritati.top().first;
}
int main()
{
int x;
while(fin >> operatie)
if(operatie == "I")
{
fin >> x;
insereaza(x);
}
else
if(operatie == "S")
{
fin >> x;
int value = sterge(x);
if(value == -1)
gout << -1 << '\n';
}
else
if(operatie == "C")
{
fin >> x;
gout << cauta(x) << '\n';
}
else
if(operatie == "MAX")
gout << max_dif() << '\n';
else /// operatie == "MIN"
gout << min_dif() << '\n';
return 0;
}