Pagini recente » Cod sursa (job #233085) | Cod sursa (job #2004697) | Cod sursa (job #1357524) | Cod sursa (job #1444146) | Cod sursa (job #2893469)
#include <iostream>
#include <fstream>
#include <set>
#include <queue>
using namespace std;
bool comp(const pair<int,int> &a,const pair<int,int> &b)
{
return a.second-a.first < b.second-b.first;
}
priority_queue < pair<int,int>, vector<pair<int,int>>, decltype(&comp)> dif(comp);
set<int>::iterator p, u;
int main()
{
ifstream in("zeap.in");
ofstream out("zeap.out");
set <int> myheap;
int x;
string op;
while(in>>op){
if(op[0] == 'I'){
in>>x;
auto i = myheap.find(x);
if(i == myheap.end())
{
myheap.insert(x);
i = myheap.find(x);
if(i != myheap.begin())
{
auto j = i;
j--;
dif.push(make_pair(*i, *j));
}
auto k = i;
k++;
if(k != myheap.end())
dif.push(make_pair(*k, *i));
}
}
else if(op[0] == 'S'){
in>>x;
auto i = myheap.find(x);
if(i !=myheap.end())
{
auto k = i;
k++;
if(i != myheap.begin() && k != myheap.end())
{
i--;
dif.push(make_pair(*k, *i));
}
myheap.erase(x);
}
else out<<-1<<'\n';
}
else if(op[0] == 'C'){
int x;
in>>x;
if(myheap.find(x) != myheap.end())out<<1<<'\n';
else out<<0<<'\n';
}
else if(op[1] == 'I'){
if(myheap.size() < 2) out<<-1<<'\n';
else{
while(myheap.find(dif.top().first) == myheap.end() || myheap.find(dif.top().second) == myheap.end()){
dif.pop();}
out<<dif.top().first - dif.top().second<<'\n';
}
}
else if(op[1] == 'A'){
if(myheap.size() < 2) out<<-1<<'\n';
else{
int i, j;
p = myheap.begin();
u = myheap.end();
u--;
out<<(*u - *p)<<'\n';
}
}
}
out.close();
in.close();
return 0;
}