Cod sursa(job #2750899)

Utilizator redikusTiganus Alexandru redikus Data 13 mai 2021 16:04:02
Problema Zeap Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <fstream>
#include <unordered_set>
#include <set>
#include <string.h>
using namespace std;

ifstream in("zeap.in");
ofstream out("zeap.out");

unordered_set<int> s;
set<int> q;

int parsenr(char l[20]){
    int x=0;
    int i=2;
    while(l[i]>=48 && l[i]<=57){
        x=x*10+(int)l[i]-48;
        ++i;
    }
    return x;
}

int main(){

    FILE * xin;
    char lin[20];
    int x;
    xin = fopen("zeap.in", "r");
    while(fgets(lin, 20, xin) != NULL){
        if(lin[0]=='I'){
            x=parsenr(lin);
            s.insert(x);
            q.insert(x);
        }
        if(lin[0]=='S'){
            x=parsenr(lin);
            if(s.find(x)!=s.end()){
                s.erase(x);
                q.erase(x);
            }
            else{
                out<<"-1"<<'\n';
            }
        }
        if(lin[0]=='C'){
            x=parsenr(lin);
            if(s.find(x)!=s.end()){
                out<<"1"<<'\n';
            }
            else{
                out<<"0"<<'\n';
            }
        }
        if(lin[1]=='A'){
            if(s.size()<2){
                out<<"-1"<<'\n';
            }
            else{
                out<<*q.rbegin()-*q.begin()<<'\n';
            }
        }
        if(lin[1]=='I'){
            if(s.size()<2){
                out<<"-1"<<'\n';
            }
            else{
                int mi=INT_MAX;
                auto r=q.begin();
                r++;
                auto ri=r;
                r--;
                while(ri!=q.end()){
                    if(*ri-*r<mi){
                        mi=*ri-*r;
                    }
                    if(mi==1){
                        break;
                    }
                    r++;
                    ri++;
                }
                out<<mi<<'\n';
            }
        }
    }

}