Pagini recente » Cod sursa (job #2352372) | Cod sursa (job #2034474) | Cod sursa (job #306047) | Cod sursa (job #2934648) | Cod sursa (job #462336)
Cod sursa(job #462336)
#include<fstream>
#include<algorithm>
#include<set>
//folosesc un set si un multiset
using namespace std;
int cont;
ofstream g("zeap.out");
set <int> s;
multiset < int > ms;
void sterge (int nr )
{
int sw1=0;
int sw2=0;
set <int> :: iterator it,it1,it2;
multiset <int> :: iterator it3;
it=s.find(nr);
if (it==s.end())
{
g<<"-1\n";
return ;
}
cont--;
if (it!=s.begin())
{
--it;
it1=it;
++it;
sw1=1;
}
++it;
if (it!=s.end())
{
sw2=1;
it2=it;
}
--it;
if (sw1 )
ms.erase (ms.find (*it-*it1));
if (sw2)
{
ms.erase (ms.find(*it2-*it));
if (sw1)
ms.insert (*it2-*it1);
}
s.erase(it);
}
void baga (int nr )
{
set <int> :: iterator it,it1,it2;
multiset <int> :: iterator it3;
int sw1=0;
int sw2=0;
it=s.find(nr);
if (it==s.end())
{
s.insert(nr);
cont++;
it=s.find(nr);
if (it!=s.begin())
{
--it;
it1=it;
++it;
sw1=1;
}
++it;
if (it!=s.end())
{
it2=it;
sw2=1;
}
--it;
if (sw1 && sw2)
ms.erase(ms.find(*it2-*it1));
if (sw1)
ms.insert (*it-*it1);
if (sw2)
ms.insert (*it2-*it);
}
}
void citire ()
{
int nr;
multiset <int> :: iterator it2;
set <int > :: iterator it;
ifstream f("zeap.in");
char sir[10];
cont=0;
while (f>>sir)
{
if (strlen(sir)==1)
{
f>>nr;
if (sir[0]=='I')
baga (nr);
if (sir[0]=='S')
sterge (nr);
if (sir[0]=='C')
{
it=s.find(nr);
if (it!=s.end())
g<<"1\n";
else
g<<"0\n";
}
}
else
if (cont>=2)
{
if (sir[1]=='I')
g<<*(ms.begin())<<"\n";
else
{
it=s.end();
it--;
g<<*it-*(s.begin())<<"\n";
}
}
else
g<<"-1\n";
}
f.close();
g.close();
}
int main()
{
citire ();
return 0;
}