Pagini recente » Cod sursa (job #1359261) | Cod sursa (job #372880) | Cod sursa (job #2071355) | Cod sursa (job #1041242) | Cod sursa (job #1228712)
#include <fstream>
#include <set>
#define DIM 6
using namespace std;
ofstream out("zeap.out");
char op[DIM];
int number;
multiset < int > Z , dif;
typedef multiset < int >:: iterator IT;
int main()
{
ifstream in("zeap.in");
while( in >> op )
{
if( op[0] == 'I' )
{
//Insert operation
in >> number;
if( Z.find(number) == Z.end())
{
Z.insert(number);
IT poz = Z.find(number);
IT poz2 , poz3;
if( poz != Z.begin() )
{
poz2 = poz;
poz3 = poz;
--poz2;
++poz3;
dif.insert( number - *poz2 );
if( poz3 != Z.end() )
{
//better diference
dif.erase(dif.find(*poz3 - *poz2));
dif.insert( *poz3 - number );
}
}
else
{
poz3 = poz;
++poz3;
if( poz3 != Z.end() )
dif.insert(*poz3 - number );
}
}
continue;
}
if( op[0] == 'S' )
{
//delete + updata the dif
in >> number;
IT poz , poz2 , poz3;
if( ( poz = Z.find(number ) ) != Z.end() )
{
poz2 = poz;
poz3 = poz;
if( poz != Z.begin() )
{
--poz2;
dif.erase(dif.find( number - *poz2 ));
}
++poz3;
if( poz3 != Z.end() )
dif.erase(dif.find(*poz3 - number));
if( poz!= Z.begin() && poz!= Z.end() )
dif.insert(*poz3 - *poz2 );
Z.erase(number);
continue;
}
out << -1 << '\n';
continue;
}
if( op[0] == 'C' )
{
in >> number ;
out << ( Z.find(number) != Z.end() ) << '\n';
continue;
}
if( op[1] == 'A')
{
//maxim
if( Z.size() < 2 )
{
out << -1 << '\n';
continue;
}
IT sf = Z.end();
--sf;
out << *sf - *Z.begin() << '\n';
continue;
}
if( op[1] == 'I' )
{
//minim;
if( dif.size())
out << *dif.begin() << '\n';
else
out << -1 << '\n';
continue;
}
}
return 0;
}