Pagini recente » Cod sursa (job #1983530) | Cod sursa (job #2273053) | Cod sursa (job #2899428) | Cod sursa (job #2002172) | Cod sursa (job #2899429)
#include <iostream>
#include <fstream>
#include <map>
#include <set>
using namespace std;
ifstream in("zeap.in");
ofstream out("zeap.out");
set<int>zeap;
map<int,int>minDif;
int minim=2*1e9;
void inserare(int val){
zeap.insert(val);
if(zeap.size()>1){
auto valNext=zeap.upper_bound(val);
if(valNext!=zeap.end()){
int dif=*valNext-val;
minDif[dif]++;
if(dif<minim)
minim=dif;
}
auto valPrev = zeap.lower_bound(val);
if(valPrev!=zeap.begin()){
int dif=val-*prev(valPrev);
minDif[dif]++;
if(dif<minim)
minim=dif;
}
}
}
void stergere(int val){
int a1=-1,a2=-1;
if(zeap.find(val)==zeap.end()){
out<<"-1\n";
return;
}
if(zeap.size()>1){
auto valNext=zeap.upper_bound(val);
if(valNext!=zeap.end()){
a1=*valNext;
int dif=*valNext-val;
minDif[dif]--;
if(minDif[dif]==0)
minDif.erase(minDif.find(dif));
}
auto valPrev=zeap.lower_bound(val);
if(valPrev!=zeap.begin()){
int dif=val-*prev(valPrev);
a2=*prev(valPrev);
minDif[dif]--;
if(minDif[dif]==0)
minDif.erase(minDif.find(dif));
}
if(a1!=-1 && a2!=-1)
minDif[a1-a2]++;
minim=minDif.begin()->first;
}
zeap.erase(val);
}
void cauta(int val){
if(zeap.find(val)!=zeap.end()) {
out << "1\n";
return;
}
out<<"0\n";
}
int main() {
string op;
int val;
while(in>>op){
if(op=="I"){
in>>val;
inserare(val);
}
else if(op=="S"){
in>>val;
stergere(val);
}
else if(op=="C"){
in>>val;
cauta(val);
}
else if(op=="MIN"){
if(zeap.size()>=2)
out<<minim<<"\n";
else
out<<-1<<'\n';
}
else{
if(zeap.size()>=2)
out<<*(prev(zeap.end()))-*zeap.begin()<<"\n";
else
out<<-1<<"\n";
}
}
return 0;
}