Pagini recente » Cod sursa (job #460534) | Cod sursa (job #1668942) | Cod sursa (job #1328098) | Cod sursa (job #2044389) | Cod sursa (job #785367)
Cod sursa(job #785367)
#include <fstream>
#include <set>
using namespace std;
ifstream f("zeap.in");
ofstream g("zeap.out");
set<int> M;
multiset<int> D;
string S;
set<int>::iterator l,m,r;
void Insert (int X)
{
if (M.find(X)!=M.end())
return;
if (M.empty())
{
M.insert(X);
return;
}
M.insert(X);
r=l=m=M.find(X);
++r;
if (m==M.begin())
{
D.insert(*r-*m);
return;
}
--l;
if (r==M.end())
{
D.insert(*m-*l);
return;
}
D.erase(*r-*l);
D.insert(*r-*m);
D.insert(*m-*l);
}
int Delete (int X)
{
l=r=m=M.find(X);
if (m==M.end()) return -1;
r++;
if (m==M.begin() && r==M.end())
{
M.erase(m);
return 0;
}
if (m==M.begin())
{
D.erase(*r-*m);
return 0;
}
l--;
if (r==M.end())
{
D.erase(*m-*l);
return 0;
}
D.erase(*r-*m);
D.erase(*m-*l);
D.insert(*r-*l);
M.erase(m);
return 0;
}
bool Search (int X)
{
m=M.find(X);
return !(m==M.end());
}
int MaxDif ()
{
int a=*M.rbegin();
int b=*M.begin();
return a-b;
}
int MinDif ()
{
return *D.begin();
}
unsigned int i;
int GetInt ()
{
int N=0;
for (i=2; i<S.size(); i++)
N=N*10+S[i]-'0';
return N;
}
int main ()
{
int N;
while (getline(f,S))
{
if (S=="MAX")
{
g << MaxDif() << '\n';
continue;
}
if (S=="MIN")
{
g << MinDif() << '\n';
continue;
}
if (S[0]=='I')
{
N=GetInt();
Insert(N);
continue;
}
if (S[0]=='S')
{
N=GetInt();
if (Delete(N)==-1)
g << -1 << '\n';
continue;
}
if (S[0]=='C')
{
N=GetInt();
g << Search(N) << '\n';
continue;
}
}
f.close();
g.close();
return 0;
}