Pagini recente » Cod sursa (job #1073262) | Cod sursa (job #2169113) | Profil 12Foarte | Cod sursa (job #2947533) | Cod sursa (job #2097678)
#include <bits/stdc++.h>
std::set <int> mySet;
int count;
std::multiset <int> diff;
int main(){
FILE*fi,*fo;
fi = fopen("zeap.in","r");
fo = fopen("zeap.out","w");
char c = fgetc(fi);
while(c == 'I' || c == 'S' || c == 'C' || c == 'M'){
if(c == 'I'){
int x;
fscanf(fi,"%d", &x);
auto it = mySet.find(x);
if(it == mySet.end()){
if(count >= 1){
if(x < *mySet.begin())
diff.insert(*mySet.begin() - x);
else if(x > *mySet.rbegin())
diff.insert(x - *mySet.rbegin());
else{
auto it1 = mySet.lower_bound(x), it2 = mySet.upper_bound(x);
it1--;
diff.erase(diff.find(*it2 - *it1));
diff.insert(x - *it1);
diff.insert(*it2 - x);
}
}
count++;
mySet.insert(x);
}
}
else if(c == 'S'){
int x;
fscanf(fi,"%d", &x);
auto it = mySet.find(x);
if(it != mySet.end()){
if(count >= 2){
if(x == *mySet.begin()){
auto it = mySet.begin(); it++;
diff.erase(diff.find(*it - x));
}
else if(x == *mySet.rbegin()){
auto it = mySet.rbegin(); it--;
diff.erase(diff.find(x - *it));
}
else{
auto it1 = mySet.lower_bound(x), it2 = mySet.upper_bound(x);
it1--;
diff.insert(*it2 - *it1);
diff.erase(diff.find(x - *it1));
diff.erase(diff.find(*it2 - x));
}
}
count--;
mySet.erase(it);
}
else
fprintf(fo,"-1\n");
}
else if(c == 'C'){
int x;
fscanf(fi,"%d", &x);
auto it = mySet.find(x);
if(it != mySet.end())
fprintf(fo,"1\n");
else
fprintf(fo,"0\n");
}
else{
c = fgetc(fi);
if(count < 2)
fprintf(fo,"-1");
else if(c == 'A')
fprintf(fo,"%d\n", *mySet.rbegin() - *mySet.begin());
else
fprintf(fo,"%d\n", *diff.begin());
fgetc(fi);
}
fgetc(fi);
c = fgetc(fi);
}
fclose(fi);
fclose(fo);
return 0;
}