Pagini recente » Cod sursa (job #1145763) | Cod sursa (job #2331686) | Cod sursa (job #71470) | Cod sursa (job #1595683) | Cod sursa (job #3135528)
#include <iostream>
#include <fstream>
#include <set>
#include <cstring>
using namespace std;
ifstream in("zeap.in");
ofstream out("zeap.out");
set<int>::iterator i, index1, index2,new_i;
multiset<int>::iterator mini; /// minimurile din zeap
char op[12];
set<int> zeap;
multiset<int> zmin;
int main()
{
while (in.getline(op,13))
{
if (op[0]=='I') /// inserare
{
char p[12];
strcpy(p,op+2);
int sum=0;
for( int i = 0 ; i<strlen(p);i++)
{
sum*=10;
sum+=p[i]-'0';
}
if (zeap.find(sum) == zeap.end())
{
zeap.insert(sum);
i = zeap.find(sum);
if (i != zeap.begin()) /// punem minimul dintre el si cel de dinaintea lui in zmin
{
index1=i;
index1--;
zmin.insert(*i - *index1);
}
index2=i;
index2++;
if (index2 != zeap.end()) /// punem minimul dintre el si cel de dupa el in zmin
zmin.insert(*index2 - *i);
}
}
else if (op[0]=='S') /// stergere
{
char p[12];
strcpy(p,op+2);
int sum=0;
for( int i = 0 ; i<strlen(p);i++)
{
sum*=10;
sum+=p[i]-'0';
}
i=zeap.find(sum); /// analogic inserarii , cu cel de dinainte de el si cel de dupa el
if(i==zeap.end())
out<<-1<<endl;
else
{
if (i!=zeap.begin())
{
index1=i;
index1--;
zmin.erase(zmin.find(*i - *index1));
new_i=i;
new_i++;
if (new_i != zeap.end())
zmin.insert(*new_i - *index1);
}
index2=i;
index2++;
if (index2 != zeap.end())
zmin.erase(zmin.find(*index2 - *i));
zeap.erase(i);
}
}
else if (op[0]=='C') ///cautare
{
char p[12];
strcpy(p,op+2);
int sum=0;
for( int i = 0 ; i<strlen(p);i++)
{
sum*=10;
sum+=p[i]-'0';
}
i=zeap.find(sum);
if (i != zeap.end())
out<<1<<endl;
else
out<<0<<endl;
}
else if (op[1]=='I') ///min, primul element din multiset-ul zmin
{
if (zmin.empty())
out<<-1<<endl;
else
{
mini=zmin.begin();
out<<*mini<<endl;
}
}
else if (op[1]=='A') ///max, diferenta dintre maxim si minim din zeap
{
if (zeap.size()<2)
out<<-1<<endl;
else
{
index2=zeap.end();
index2--;
index1=zeap.begin();
out<<*index2 -*index1<<endl;
}
}
}
return 0;
}