Cod sursa(job #3135657)

Utilizator iulia_tamasTamas Iulia iulia_tamas Data 3 iunie 2023 22:28:58
Problema Zeap Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.39 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");

set<long long> z;
priority_queue<pair<int, pair<int, int>>> d;
string cerinta;
long long n;

void insereaza(long long x){
    auto f=z.find(x);
    if(f==z.end()){
        z.insert(x);
        if(z.size()>=2){
            auto index=z.find(x);
            auto ddd=z.find(x);
            ddd++;
        if(index!=z.begin() and ddd!=z.end()){
            auto ss=z.find(x);
            ss--;
            auto dd=z.find(x);
            dd++;
            long long dif1=abs(*ss-x);
            long long dif2=abs(*dd-x);
            d.push(make_pair(-dif1,make_pair(*ss,x)));
            d.push(make_pair(-dif2,make_pair(*dd,x)));
        }
        if(index==z.begin()){
            auto dd=z.find(x);
            dd++;
            long long dif2=abs(*dd-x);
            d.push(make_pair(-dif2,make_pair(*dd,x)));
        }
        if(ddd==z.end()){
            auto ss=z.find(x);
            ss--;
            long long dif1=abs(*ss-x);
            d.push(make_pair(-dif1,make_pair(*ss,x)));
        }
        }
    }
}

void sterge(long long x){
    auto f=z.find(x);
    if(f==z.end()){
        fout<<-1<<endl;
        return;
    }
    auto dr=z.find(x);
    dr++;
    if(f==z.begin() or dr==z.end())
        z.erase(x);
    else{
        auto st=z.find(x);
        st--;
        d.push(make_pair(-abs(*st-*dr),make_pair(*st,*dr)));
        z.erase(x);
    }
}

int cauta(long long x){
    return z.count(x);
}

void maxx(){
    if(z.size()<2){
        fout<<-1<<endl;
        return;
    }
    else{
        fout<<*z.rbegin() - *z.begin()<<endl;
    }
}

void minn(){
    if(z.size()<2){
        fout<<-1<<endl;
        return;
    }
    else{
        while(cauta(d.top().second.first)*cauta(d.top().second.second)==0){
            cout<<-d.top().first<<endl;
            d.pop();}
        fout<<-d.top().first<<endl;
    }

}

int main()
{
while(fin>>cerinta){
        if(cerinta=="I"){
            fin>>n;
            insereaza(n);
        }
        if(cerinta=="S"){
            fin>>n;
            sterge(n);
        }
        if(cerinta=="C"){
            fin>>n;
            fout<<cauta(n)<<endl;
        }
        if(cerinta=="MAX")
            maxx();
        if(cerinta=="MIN")
            minn();

    }
    return 0;
}