Pagini recente » Cod sursa (job #2811267) | Cod sursa (job #1132684) | Cod sursa (job #1340928) | Cod sursa (job #942844) | Cod sursa (job #3129656)
#include <iostream>
#include <fstream>
#include <set>
#include <string>
#include <sstream>
#include <climits>
std::ifstream in("../zeap.in");
std::ofstream out("../zeap.out");
std::set<int> zeap;
std::pair<int, std::pair<int,int>> dif_mn;
/// valoare dif min valorile din care este obt
void insert(int x)
{
if(zeap.find(x) == zeap.end())
{
zeap.insert(x);
auto itx = zeap.find(x);
auto st = prev(itx);
auto dr = next(itx);
}
}
std::string sterge(int x)
{
if(zeap.find(x) == zeap.end())
return "-1";
else
{
//auto it = zeap.find(x);
zeap.erase(x);
if(dif_mn.second.first == x || dif_mn.second.second == x)
dif_mn = std::make_pair(INT_MAX, std::make_pair(0,0));
/// daca nu mai exista niciun insert dupa delete, calculez diferenta minima in apelul dif min,
/// pt eficienta.
return "";
}
}
std::string dif_min()
{
if(zeap.size() < 2)
return "-1";
else if(dif_mn.first == INT_MAX)
{
for(auto i = next(zeap.begin()); i!=zeap.end(); i++)
{
auto st = prev(i);
if(*i - *st < dif_mn.first)
dif_mn = std::make_pair(*i - *st, std::make_pair(*i, *st));
}
}
return std::to_string(dif_mn.first);
}
std::string dif_max()
{
if(zeap.size() < 2)
return "-1";
else
return std::to_string(*(zeap.rbegin()) - *(zeap.begin()));
}
int main()
{
std::string op;
dif_mn = std::make_pair(INT_MAX, std::make_pair(0,0));
while(in>>op)
{
if(op == "I")
{
int x;
in>>x;
insert(x);
}
else if(op == "S")
{
int x;
in>>x;
auto rez = sterge(x);
if(!rez.empty())
out<<rez<<'\n';
}
else if(op == "MAX")
out<<dif_max()<<'\n';
else if(op == "MIN")
out<<dif_min()<<'\n';
else if(op == "C")
{
int x;
in>>x;
out<<(zeap.find(x) != zeap.end() ? "1" : "0")<<'\n';
}
}
return 0;
}