Pagini recente » Cod sursa (job #2293262) | Cod sursa (job #2215845) | qwegqe | Cod sursa (job #1867162) | Cod sursa (job #2899414)
#include<fstream>
#include<set>
#include<queue>
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");
set<int> zeap;
priority_queue<pair<int, pair<int, int>>> mindif;
string operatii;
int n;
void insereaza(int x){
if(zeap.count(x)==0){
zeap.insert(x);
auto st=zeap.find(x);
auto dr=st;
dr++;
if(st!=zeap.begin()){
st--;
mindif.push(make_pair((-1)*abs(x-*st), make_pair(*st, x)));
}
if(dr!=zeap.end())
mindif.push(make_pair((-1)*abs(*dr-x), make_pair(*dr, x)));
}
}
int sterge(int x){
if(zeap.count(x)!=0){
auto poz=zeap.find(x);
auto poz1=poz;
poz1++;
if(poz==zeap.begin() || poz1==zeap.end())
zeap.erase(x);
else{
auto poz2=poz;
poz2--;
if(poz!=zeap.begin() && poz1!=zeap.end())
mindif.push(make_pair((-1)*abs(*poz1-*poz2), make_pair(*poz1, *poz2)));
}
}
else
return -1;
}
int cauta(int x){
return zeap.count(x);
}
int max_dif(){
if(zeap.size()>=2){
auto primul=zeap.begin();
auto ultimul=zeap.end();
ultimul--;
return abs(*ultimul-*primul);
}
else
return -1;
}
int min_dif(){
if(zeap.size()>=2){
while(zeap.find(mindif.top().second.first)==zeap.end() || zeap.find(mindif.top().second.second)==zeap.end())
mindif.pop();
return abs(mindif.top().first);
}
else
return -1;
}
int main(){
while(fin>>operatii){
if(operatii=="I"){
fin>>n;
insereaza(n);
continue;
}
if(operatii=="S"){
fin>>n;
if(sterge(n)==-1)
fout<<sterge(n)<<"\n";
continue;
}
if(operatii=="C"){
fin>>n;
fout<<cauta(n)<<"\n";
continue;
}
if(operatii=="MAX"){
fout<<max_dif()<<"\n";
continue;
}
if(operatii=="MIN"){
fout<<min_dif()<<"\n";
continue;
}
}
}