Pagini recente » Cod sursa (job #1705316) | Cod sursa (job #1703187) | Cod sursa (job #39797) | Cod sursa (job #2566965) | Cod sursa (job #414708)
Cod sursa(job #414708)
#include <iostream>
#include <set>
using namespace std;
set<int> S;
set<int>::iterator it, it1, it2, it5, it6;
pair<set<int>::iterator,bool> ret;
multiset<int> D;
multiset<int>::iterator it3, it4;
char op[20];
int main() {
FILE *f1=fopen("zeap.in", "r"), *f2=fopen("zeap.out", "w");
int i, j, p, q, nr;
fgets (op, 20, f1);
while(!feof(f1)) {
p=0; nr=0;
while ((op[p] < '0' || op[p] > '9') && op[p] != '\n') p++;
while (op[p] >= '0' && op[p] <= '9') {
nr=nr*10+op[p]-'0';
p++;
}
p=nr;
if(op[0]=='I') {
it6=S.lower_bound(p);
if((*it6)!=p) {
it=it6;
if(S.size()>=1) {
it1=it; it2=it;
if(it1!=S.begin()) {
it1--;
}
if(it2!=S.end()) {
D.insert(abs(p-*it2));
}
if(it1!=it2) {
D.insert(abs(p-*it1));
}
}
else if(S.size()==0) { /**do nothing;**/ }
S.insert(p);
}
}
else if(op[0]=='S') {
it=S.find(p);
if(it==S.end()) {
fprintf(f2, "%d\n", -1);
}
else {
it5=S.end(); it5--;
if(S.size()==1) { S.erase(it); }
else if(it==S.begin()) {
it1=it; it1++;
if(D.size()) {
it4=D.find(abs(*it-*it1));
if(it4!=D.end()) { D.erase(abs(*it-*it1)); }
}
S.erase(it);
}
else if(it==it5) {
it1=it5; it1--;
if(D.size()) {
it4=D.find(abs(*it-*it1));
if(it4!=D.end()) { D.erase(abs(*it-*it1)); }
}
S.erase(it);
}
else {
it1=it; it1--;
it2=it; it2++;
D.insert(abs((*it2)-(*it1)));
it3=D.find(abs((*it)-(*it1)));
if(it3!=D.end()) { D.erase(it3); }
it4=D.find(abs((*it)-(*it2)));
if(it4!=D.end()) { D.erase(it4); }
S.erase(it);
}
}
}
else if(op[0]=='C') {
it=S.find(p);
if(it==S.end()) {
fprintf(f2, "%d\n", 0);
}
else {
fprintf(f2, "%d\n", 1);
}
}
else if(op[0]=='M' && op[1]=='A') {
if(S.size()<2) {
fprintf(f2, "%d\n", -1);
}
else {
it1=S.end(); it1--;
it2=S.begin();
fprintf(f2, "%d\n", (*it1)-(*it2));
}
}
else if(op[0]=='M' && op[1]=='I') {
if(S.size()<2) {
fprintf(f2, "%d\n", -1);
}
else {
fprintf(f2, "%d\n", (*D.begin()));
}
}
fgets (op, 20, f1);
}
fclose(f1); fclose(f2);
return 0;
}