Cod sursa(job #414593)

Utilizator vladiiIonescu Vlad vladii Data 10 martie 2010 11:55:35
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)));
                        it4=D.find(abs((*it)-(*it2)));
                        if(it3!=D.end()) { D.erase(it3); }
                        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;
}