Pagini recente » Cod sursa (job #1207073) | Cod sursa (job #2662302) | Cod sursa (job #78482) | Cod sursa (job #1245629) | Cod sursa (job #785424)
Cod sursa(job #785424)
#include <fstream>
#include <set>
#include <map>
using namespace std;
ifstream f("zeap.in");
ofstream g("zeap.out");
set<int> M;
map<int, 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[*r-*m];
return;
}
--l;
if (r==M.end())
{
++D[*m-*l];
return;
}
--D[*r-*l];
++D[*r-*m];
++D[*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[*r-*m];
return 0;
}
l--;
if (r==M.end())
{
--D[*m-*l];
return 0;
}
--D[*r-*m];
--D[*m-*l];
++D[*r-*l];
M.erase(m);
return 0;
}
bool Search (int X)
{
m=M.find(X);
return (m!=M.end());
}
int MaxDif ()
{
if (M.size()<2) return -1;
int a=*M.rbegin();
int b=*M.begin();
return a-b;
}
int MinDif ()
{
if (D.empty()) return -1;
return (*D.begin()).first;
}
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;
}