Pagini recente » Cod sursa (job #490957) | Cod sursa (job #2822992) | Cod sursa (job #408901) | Cod sursa (job #3239571) | Cod sursa (job #2899633)
#include <iostream>
#include <set>
#include <queue>
#include <fstream>
using namespace std;
ifstream f("zeap.in");
ofstream g("zeap.out");
priority_queue<pair<int,pair<int,int>>,vector<pair<int,pair<int,int>>>,greater<pair<int,pair<int,int>>>>v;
set<int>z;
void insereaza(int x)
{
if(z.count(x)==0)
{
z.insert(x);
if(z.size()>=2)
{
auto indice = z.find(x);
if(indice != z.begin())
{
auto st =indice;
st--;
v.push({abs(*st-x),{*st,x}});
}
auto dr = indice;
dr++;
if(dr!=z.end())
v.push({abs(x-*dr),{x,*dr}});
}
}
}
int sterge(int x)
{
if(z.count(x)==0)
return -1;
auto indice = z.find(x);
auto dr = indice;
dr++;
auto st = indice;
st--;
if(dr!=z.end() && indice!=z.begin())
v.push({abs(*st- *dr),{*st,*dr}});
z.erase(x);
return 1;
}
int cauta(int x)
{
if(z.count(x))
return 1;
return 0;
}
int max_dif()
{
if(z.size()<2)
return -1;
auto j = z.end();
j--;
auto i = z.begin();
return *j- *i;
}
int min_dif()
{
if(z.size()<2)
return -1;
while(z.count(v.top().second.first)==0 || z.count(v.top().second.second)==0)
v.pop();
return v.top().first;
}
int main()
{
string a;
int x;
while(f>>a)
if(a=="I")
{
f>>x;
insereaza(x);
}
else if(a=="S")
{
f>>x;
int y = sterge(x);
if(y == -1)
g<<-1<<endl;
}
else if(a=="C")
{
f>>x;
g<<cauta(x)<<endl;
}
else if(a=="MAX")
g<<max_dif()<<endl;
else
g<<min_dif()<<endl;
}