Cod sursa(job #3135382)

Utilizator Sumurduc_TeodoraSumurduc Teodora Sumurduc_Teodora Data 3 iunie 2023 00:01:48
Problema Zeap Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <iostream>
#include <fstream>
#include <set>
#include <cmath>
#include <string>
using namespace  std;
ifstream f("zeap.in");
ofstream g("zeap.out");
void INSEREAZA(set<int> &Z,int x){
    Z.insert(x);
}
void STERGE(set<int> &Z,int x){
    Z.erase(x);
}
int CAUTA(set<int> Z,int x){
    if(Z.count(x)==0)
        return 0;
    return 1;
}
int MAX_DIF(set<int> Z){
    if(Z.size()<2)
        return -1;
    else{
        reverse_iterator<_Rb_tree<int, int, _Identity<int>, less<int>>::const_iterator> a=Z.rbegin();
        _Rb_tree_const_iterator<int> b=Z.begin();
        return abs(*a-*b);
    }
}
int MIN_DIF(set<int> Z){
    if(Z.size()<2)
        return -1;
    reverse_iterator<_Rb_tree<int, int, _Identity<int>, less<int>>::const_iterator> a=Z.rbegin();
    int min_dif=*a+1;
    auto i1=Z.begin();
    auto i2=next(Z.begin());
    while(i2!=Z.end())
    {
        int dif=abs(*i1-*i2);
        min_dif=min(min_dif,dif);
        i1++;
        i2++;
    }
    return min_dif;
}
int main() {
    set<int> Z;
    string a;
    int x;
    while(f>>a)
    {
        if(a=="I")
        {
            f>>x;
            INSEREAZA(Z,x);
        }
        if(a=="S")
        {
            f>>x;
            if(Z.count(x)!=0)
                STERGE(Z,x);
            else g<<-1<<endl;
        }
        if(a=="C")
        {
            f>>x;
            g<<CAUTA(Z,x)<<endl;
        }
        if(a=="MIN")
        {
            g<<MIN_DIF(Z)<<endl;
        }
        if(a=="MAX")
        {
            g<<MAX_DIF(Z)<<endl;
        }
    }
    return 0;
}