Pagini recente » Cod sursa (job #2977973) | Cod sursa (job #2480717) | Cod sursa (job #1640022) | Cod sursa (job #1907212) | Cod sursa (job #3133039)
#include <iostream>
#include <fstream>
#include <set>
#include<queue>
std::ifstream input_file("zeap.in");
std::ofstream output_file("zeap.out");
std::set <int> zeap;
std::priority_queue <int> max_difference,new_max_difference;
int main(){
std::string s;
while(input_file>>s){
if(s[0]=='I'){
int x;
input_file>>x;
if(zeap.find(x)==zeap.end()){
zeap.insert(x);
std::set<int>::iterator find=zeap.find(x);
std::set<int>::iterator before=find,after=find;
before--;
after++;
if(find!=zeap.begin()){
max_difference.push(-abs(*before-*find));
}
if(after!=zeap.end()){
max_difference.push(-abs(*find-*after));
}
if(find!=zeap.begin() && after!=zeap.end()){
new_max_difference.push(-abs(*before-*after));
}
}
}
else if(s[0]=='S'){
int x;
input_file>>x;
if(zeap.find(x)!=zeap.end()){
std::set<int>::iterator find=zeap.find(x);
std::set<int>::iterator before=find,after=find;
before--;
after++;
if(find!=zeap.begin()){
new_max_difference.push(-abs(*before-*find));
}
if(after!=zeap.end()){
new_max_difference.push(-abs(*find-*after));
}
if(find!=zeap.begin() && after!=zeap.end()){
max_difference.push(-abs(*before-*after));
}
zeap.erase(x);
}
else{
output_file<<-1<<"\n";
}
}
else if(s[0]=='C'){
int x;
input_file>>x;
output_file<<(zeap.find(x)!=zeap.end() ? 1 : 0)<<"\n";
}
else if(s[1]=='A'){
output_file<<(zeap.size()>1 ? *(--zeap.end()) - *(zeap.begin()) : -1)<<"\n";
}
else{
if(zeap.size()>1){
while(!new_max_difference.empty() && max_difference.top()==new_max_difference.top()){
max_difference.pop();
new_max_difference.pop();
}
output_file<<-max_difference.top()<<"\n";
}
else{
output_file<<-1<<"\n";
}
}
}
return 0;
}