Cod sursa(job #414610)
Utilizator | Data | 10 martie 2010 12:12:54 | |
---|---|---|---|
Problema | Zeap | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 4.32 kb |
#include <iostream>
#include <fstream>
#include <set>
using namespace std;
set<int> S;
set<int>::iterator it, it1, it2, it5;
pair<set<int>::iterator,bool> ret;
multiset<int> D;
multiset<int>::iterator it3, it4;
string op;
int main() {
fstream f1, f2;
int i, j, p, q;
f1.open("zeap.in", ios::in);
f2.open("zeap.out", ios::out);
while(!f1.eof()) {
f1>>op;
if(op=="I") {
f1>>p;
ret=S.insert(p);
if(ret.second==true) {
it=ret.first;
if(S.size()>1) {
it5=S.end(); it5--;
if(it==S.begin()) {
it1=it; it1++;
if(D.size()) {
it4=D.find(abs((*it1)-(*it)));
if(it4!=D.end()) { D.erase(D.find(abs((*it1)-(*it)))); }
}
q=abs((*it1)-p);
D.insert(q);
}
else if(it==it5) {
it1=it; it1--;
if(D.size()) {
it4=D.find(abs((*it1)-p));
if(it4!=D.end()) { D.erase(D.find(abs((*it1)-p))); }
}
q=abs((*it1)-p);
D.insert(q);
}
else {
it1=it; it1--;
it2=it; it2++;
if(D.size()) {
it4=D.find(abs((*it2)-(*it1)));
if(it4!=D.end()) { D.erase(D.find(abs((*it2)-(*it1)))); }
}
q=abs((*it1)-p);
j=abs((*it2)-p);
D.insert(q); D.insert(j);
}
}
else if(S.size()==1) { /**do nothing;**/ }
}
}
else if(op=="S") {
f1>>p;
it=S.find(p);
if(it==S.end()) {
f2<<-1<<endl;
}
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=="C") {
f1>>p;
it=S.find(p);
if(it==S.end()) {
f2<<0<<endl;
}
else {
f2<<1<<endl;
}
}
else if(op=="MAX") {
if(S.size()<2) {
f2<<-1<<endl;
}
else {
it1=S.end(); it1--;
it2=S.begin();
f2<<(*it1)-(*it2)<<endl;
}
}
else if(op=="MIN") {
if(S.size()<2) {
f2<<-1<<endl;
}
else {
f2<<(*D.begin())<<endl;
}
}
}
f1.close(); f2.close();
return 0;
}