Pagini recente » Cod sursa (job #545088) | Cod sursa (job #2883862) | Cod sursa (job #1466251) | Cod sursa (job #2319363) | Cod sursa (job #2668696)
#include <iostream>
#include <fstream>
#include <set>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream in("zeap.in");
ofstream out("zeap.out");
set <int> a, difs;
set<int>::iterator it, it2, it3;
int val1, val2, minn=2000000000;
void ins(int x)
{
int val1, val2;
a.insert(x);
if(a.size()>=2)
{
it=upper_bound(a.begin(), a.end(), x);
if(it==a.end())
{
advance(it, -1);
val2=*it;
advance(it, -1);
val1=*it;
difs.insert(val2-val1);
}
else if(it==a.begin())
{
val1=*it;
advance(it, 1);
val2=*it;
difs.insert(val2-val1);
}
else
{
advance(it, -1);
val1=*it;
advance(it, 2);
val2=*it;
advance(it, -1);
difs.erase(val2-val1);
difs.insert(*it-val1), difs.insert(val2-*it);
}
}
}
bool searchh(int x)
{
it=upper_bound(a.begin(), a.end(), x);
advance(it, -1);
return (*it==x);
}
void eras(int x)
{
int val1, val2;
it=upper_bound(a.begin(), a.end(), x);
it2=it;
advance(it, -1);
if(*it==x)
{
if(a.size()<=2)
{
while(!difs.empty()) difs.erase(difs.begin());
a.erase(x);
return;
}
if(it2==a.end())
{
advance(it2, -2);
difs.erase(*it-*it2);
a.erase(x);
}
else if(it2==a.begin())
{
advance(it, 2);
difs.erase(*it2-*it);
a.erase(x);
}
else
{
it3=it;
advance(it, -1);
difs.erase(*it3-*it), difs.erase(*it2-*it3);
difs.insert(*it2-*it);
a.erase(it3);
}
a.erase(x);
}
else out<<"-1\n";
}
int getMaxim()
{
it=a.end();
advance(it, -1);
return *it;
}
int getMinim()
{
return *a.begin();
};
int maxim()
{
if(a.size()<2) return -1;
return getMaxim()-getMinim();
}
int minim()
{
if(a.size()<2) return -1;
return *difs.begin();
}
int main()
{
char s[4];
int x;
while(in>>s)
{
if(!strcmp(s, "I")) in>>x, ins(x);
else if(!strcmp(s, "S")) in>>x, eras(x);
else if(!strcmp(s, "C")) in>>x, out<<searchh(x)<<'\n';
else if(!strcmp(s, "MIN")) out<<minim()<<'\n';
else out<<maxim()<<'\n';
}
return 0;
}