Pagini recente » Cod sursa (job #2823673) | Cod sursa (job #140230) | Cod sursa (job #1164306) | Cod sursa (job #1600624) | Cod sursa (job #2899516)
#include <iostream>
#include <fstream>
#include <map>
#include <set>
using namespace std;
ifstream f("zeap.in");
ofstream g("zeap.out");
map<int,int>mini;
set<int>zeap;
int minim=999999999,n;
string m;
void cauta(int n)
{
if(zeap.find(n)!=zeap.end())
g<<"1"<<"\n";
else
g<<"0"<<"\n";
}
void insereaza(int n)
{
zeap.insert(n);
if(zeap.size()>1)
{
//urmatoarea valoare
auto uv=zeap.upper_bound(n);
if(uv!=zeap.end())
{
int dif=*uv-n;
mini[dif]++;
if(dif<minim)
minim=dif;
}
auto vp=zeap.lower_bound(n);
if(vp!=zeap.begin())
{
int dif=n-*prev(vp);
mini[dif]++;
if(dif<minim)
minim=dif;
}
}
}
void sterge(int n)
{
int a=-1,b=-1;
if(zeap.find(n)==zeap.end())
{
g<<"-1"<<"\n";
return;
}
if(zeap.size()>1)
{
auto uv=zeap.upper_bound(n);
if(uv!=zeap.end())
{
a=*uv;
int dif=*uv-n;
mini[dif]--;
if(mini[dif]==0)
mini.erase(mini.find(dif));
}
auto vp=zeap.lower_bound(n);
if(vp!=zeap.begin()){
int dif=n-*prev(vp);
b=*prev(vp);
mini[dif]--;
if(mini[dif]==0)
mini.erase(mini.find(dif));
}
if(a!=-1 && b!=-1)
mini[a-b]++;
minim=mini.begin()->first;
}
zeap.erase(n);
}
int main()
{
while(f>>m)
{
if(m=="S")
{
f>>n;
sterge(n);
}
else
if(m=="C")
{
f>>n;
cauta(n);
}
else
if(m=="I")
{
f>>n;
insereaza(n);
}
else
if(m=="MIN")
{
if(zeap.size()>=2)
g<<minim<<"\n";
else
g<<"-1"<<"\n";
}
else
if(m=="MAX")
{
if(zeap.size()>=2)
g<<*(prev(zeap.end()))-*zeap.begin();
else
g<<"-1"<<"\n";
}
}
return 0;
}