Cod sursa(job #3135410)

Utilizator Sumurduc_TeodoraSumurduc Teodora Sumurduc_Teodora Data 3 iunie 2023 02:28:20
Problema Zeap Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <iostream>
#include <fstream>
#include <set>
using namespace std;
ifstream f("C:\\Users\\TEODORA\\Desktop\\Anul I sem II\\Structuri de date\\Laborator\\arbori de cautare\\Zeap\\zeap.in");
ofstream g("C:\\Users\\TEODORA\\Desktop\\Anul I sem II\\Structuri de date\\Laborator\\arbori de cautare\\Zeap\\zeap.out");
set<int> s;
set<int> pq;
void INSERT( int x){
    s.insert(x);
    auto aux = s.find(x);
    if(s.size()==2)
        pq.insert(*aux-*s.begin());
    if(s.size()>2)
    {
        auto aux2=aux--;
        pq.insert(*aux2-*aux);
    }
}

void STERGE(int x){
    auto aux = s.find(x),aux2 = aux--;
    int dif=*aux2-*aux;
    pq.erase(dif);
    aux=aux2++;
    dif=*aux2-*aux;
    pq.erase(dif);
    aux--;
    if(s.size()>=2)
        pq.insert(*aux2 - *aux);

    s.erase(x);
}

int cauta(int x){
    if(s.count(x)==0)
        return 0;
    return 1;
}

int maxDif(){
    if(s.size()<2)
        return -1;
    return *(s.rbegin()) - *(s.begin());
}

int minDif(){
    if(!pq.empty())
        return *pq.begin();
    return -1;
}

int main(){
    string sir;
    while(f>>sir){
        if(sir=="I"){
            int x;
            f >> x;
            INSERT(x);
        }
        else if(sir == "S"){
            int x;
            f >> x;
            if(s.find(x) == s.end())
                g << -1 << '\n';
            else{
                STERGE(x);
            }
        }
        else if(sir == "C"){
            int x;
            f >> x;
            g << cauta( x) << '\n';
        }
        else if(sir =="MAX"){
            g << maxDif() << '\n';}
        else
            g << minDif() << '\n';

    }
    return 0;
}