Pagini recente » Cod sursa (job #1809749) | Cod sursa (job #1283668) | Cod sursa (job #372444) | Cod sursa (job #2212902) | Cod sursa (job #2750740)
#include <bits/stdc++.h>
#define stt first
#define drr second
using namespace std;
ofstream fout("zeap.out");
class CMP
{
public:
bool operator() (pair<int, int> &a, pair<int, int> &b)
{
return (a.drr - a.stt) > (b.drr - b.stt);
}
};
set<int> s;
priority_queue< pair<int, int>, vector< pair<int, int> >, CMP> q;
int Numar(char lin[])
{
int i, nr = 0;
for(i = 2; lin[i] != '\n'; i++)
nr = nr * 10 + (lin[i] - '0');
return nr;
}
void Insereaza(int x)
{
if(s.count(x))
return;
s.insert(x);
set<int>::iterator it = s.find(x);
if(it != s.begin())
{
it--;
q.push({*it, x});
}
set<int>::iterator it2 = s.find(x);
it2++;
if(it2 != s.end())
q.push({x, *it2});
}
int Cauta(int x)
{
return s.count(x);
}
int Sterge(int x)
{
if(!Cauta(x))
return 0;
set<int>::iterator it = s.find(x);
set<int>::iterator it2 = it;
it2++;
if(it != s.begin() && it != s.end())
{
it--;
q.push({*it, *it2});
}
s.erase(s.find(x));
return 1;
}
int MaxDif()
{
if(s.size() < 2)
return -1;
return *s.rbegin() - *s.begin();
}
int MinDif() // :')
{
if(s.size() < 2)
return -1;
while(!(s.count(q.top().stt) && s.count(q.top().drr)))
q.pop();
return q.top().drr - q.top().stt;
}
int main()
{
int x;
FILE * pFile;
char lin[14];
pFile = fopen("zeap.in", "r");
while(fgets(lin, 14, pFile) != NULL)
if(lin[0] == 'I')
{
x = Numar(lin);
Insereaza(x);
}
else if(lin[0] == 'S')
{
x = Numar(lin);
if(!Sterge(x))
fout << -1 << "\n";
}
else if(lin[0] == 'C')
{
x = Numar(lin);
fout << Cauta(x) << "\n";
}
else if(lin[1] == 'A') // max
{
fout << MaxDif() << "\n";
}
else // min
{
fout << MinDif() << "\n";
}
fclose (pFile);
return 0;
}