Pagini recente » Cod sursa (job #2125945) | Cod sursa (job #1223046) | Cod sursa (job #493607) | Cod sursa (job #162315) | Cod sursa (job #2751763)
#include <iostream>
#include <fstream>
#include <cstring>
#include <set>
#include <queue>
#include <iterator>
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");
typedef pair<int,int> pii;
struct compare{
bool operator()(const pair<int, pii>& a, const pair<int, pii>& b){
return a.first > b.first;
}
};
set<int> z;
priority_queue<pair<int, pii>, vector<pair<int, pii>>, compare> mindif, maxdif;
void getmax(){
if(z.size() < 2)
fout << "-1\n";
else fout<< *(z.rbegin()) - *(z.begin())<< "\n";
}
void getmin(){
if(mindif.empty())
{
fout << "-1\n";
return;
}
int n1 = mindif.top().second.first;
int n2 = mindif.top().second.second;
while(z.find(n1) == z.end() || z.find(n2) == z.end()){
mindif.pop();
if(mindif.empty())
{
fout << "-1\n";
return;
}
n1 = mindif.top().second.first;
n2 = mindif.top().second.second;
}
fout<< mindif.top().first<< "\n";
}
void print(){
set < int > ::iterator it;
for(it = z.begin(); it != z.end(); ++it)
cout << *it << " ";
cout << "\n";
}
void operatie(char str[]){
int i = 2;
int nr = 0;
int pred,succ;
pair<set<int>::iterator,bool> ret;
set<int>::iterator it1, it2;
if(str[0] == 'C' || str[0] == 'I' || str[0] == 'S'){
while(isdigit (str[i])){
nr = nr*10 + (str[i] - '0');
i++;
}
}
switch(str[0]){
case 'C':
fout << !(z.find(nr) == z.end()) << "\n";
break;
case 'I':
ret = z.insert(nr); /// daca a fost inserat in set, adaugam diferenta dintre el si succesor in pq
if(ret.second != false){
it1 = ret.first;
if (it1 != z.begin()) {
--it1;
mindif.push({nr - *it1,{nr, *it1}});
}
it2 = ret.first;
it2++;
if (it2 != z.end()) {
mindif.push({*it2 - nr,{nr, *it2}});
}
}
break;
case 'S':
if(z.find(nr) == z.end())
fout << "-1\n";
else z.erase(nr);
break;
default:
if(str[1] == 'A')
getmax();
else getmin();
break;
}
}
void solve(){
char str[20];
while(true){
fin.getline(str, 20);
if( fin.eof() )
break;
operatie(str);
}
}
int main()
{
solve();
return 0;
}