Pagini recente » Cod sursa (job #2764879) | Cod sursa (job #235267) | Cod sursa (job #1863044) | Cod sursa (job #3216749) | Cod sursa (job #2898097)
#include <fstream>
#include <set>
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
set<long long >zeap;
set<long long> diferente;
int main()
{
ifstream f("zeap.in");
ofstream g("zeap.out");
string operatie;
long long nr;
set<long long >::iterator curent,previos,nextp,l;
long long i = 0;
while (f>>operatie)
{
if(operatie == "I") {
f >> nr;
if (zeap.find(nr) != zeap.end())
continue;
else { zeap.insert(nr); i++;}
if(zeap.size()>=2) {
curent = zeap.find(nr);
previos = curent;
nextp = curent;
nextp++;previos--;
l = zeap.end();
l--;
if(curent != zeap.begin() && curent != l) {
diferente.insert(abs(*curent - *nextp));
diferente.insert(abs(*curent - *previos));
diferente.erase(abs(*nextp-*previos));
}
else if(curent != zeap.begin())
diferente.insert(abs(*curent-*previos));
else if(curent != l)
diferente.insert(abs(*curent-*nextp));
}
} else if(operatie == "C")
{
f>>nr;
if(zeap.find(nr) != zeap.end())
g<<1<<'\n';
else
g<<0<<'\n';
} else if(operatie == "S")
{
f>>nr;
if(zeap.find(nr) != zeap.end()) {
curent = zeap.find(nr);
previos = curent;
nextp = curent;
previos--;
nextp ++;
l = zeap.end();
l--;
if(curent != zeap.begin() && curent != l) {
diferente.erase(abs(*curent - *nextp));
diferente.erase(abs(*curent - *previos));
diferente.insert(abs(*nextp-*previos));
}
else if(curent != zeap.begin())
diferente.erase(abs(*curent-*previos));
else if(curent != l)
diferente.erase(abs(*curent-*nextp));
diferente.insert(abs(*nextp-*previos));
zeap.erase(nr);
}
else
g<<-1<<'\n';
} else if(operatie == "MAX") {
if (zeap.size() < 2)
g << -1 << '\n';
else {
l = zeap.end();
l--;
curent = zeap.begin();
g<<abs(*l-*curent)<<'\n';
}
} else if(operatie == "MIN") {
if(zeap.size()>=2) {
long long minim = *diferente.begin();
g << minim << '\n';
} else g<<-1<<'\n';
}
}
f.close();g.close();
return 0;
}