Pagini recente » Cod sursa (job #200894) | Cod sursa (job #1734428) | Cod sursa (job #681440) | Cod sursa (job #60049) | Cod sursa (job #2751843)
#include <iostream>
#include <set>
#include <queue>
#include <fstream>
using namespace std;
priority_queue<pair<int,pair<int,int>>,vector<pair<int,pair<int,int>>>,greater<pair<int,pair<int,int>>>>interval;
set<int>zeap;
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--;
interval.push({abs(*index_stanga-x),{*index_stanga,x}});
}
auto index_dreapta=index_x;
index_dreapta++;
if(index_dreapta!=zeap.end())
interval.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() && index_x!=zeap.begin())
interval.push({abs(*index_stanga- *index_dreapta),{*index_stanga,*index_dreapta}});
zeap.erase(x);
return 1;
}
int cautare(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(interval.top().second.first)==0 || zeap.count(interval.top().second.second)==0)
interval.pop();
return interval.top().first;
}
int main()
{
ifstream f("zeap.in");
ofstream g("zeap.out");
string op;
int x;
while(f>>op)
if(op=="I")
{
f>>x;
insereaza(x);
}
else if(op=="S")
{
f>>x;
int value=sterge(x);
if(value == -1)
g<<-1<<"\n";
}
else if(op=="C")
{
f>>x;
g<<cautare(x)<<"\n";
}
else if(op=="MAX")
g<<max_dif()<<"\n";
else
g<<min_dif()<<"\n";
return 0;
}