Cod sursa(job #3135631)

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

multiset<long long> hp;
string cerinta;
long long mind;
long long n;
void minn(){
    multiset<long long>::iterator it = hp.begin();
    multiset<long long>::iterator nt = std::next(it);
    mind = std::numeric_limits<long long>::max();

    while (nt != hp.end()) {
        long long dif = *nt - *it;
        if (dif < mind) {
            mind = dif;
        }

        ++it;
        ++nt;
    }

    /*multiset<long long>::iterator it;
    multiset<long long>::iterator nt;
    mind = LONG_LONG_MAX;
    sort(hp.begin(), hp.end());
    for(it=hp.begin(); it!=std::prev(hp.end()); ++it) {
        nt= next(it);
        long long dif = *nt-*it;
        if (dif < mind){
            mind = dif;
        }
    }*/
}
int main()
{
    while(fin>>cerinta){
        if(cerinta=="I"){
            fin>>n;
            if(hp.count(n)==0)
                hp.insert(n);
        }
        if(cerinta=="S"){
            fin>>n;
            if(hp.count(n)==1)
                hp.erase(n);
            else fout<<-1<<endl;
        }
        if(cerinta=="C"){
            fin>>n;
            fout<<hp.count(n)<<endl;
        }
        if(cerinta=="MAX"){
            if(hp.size()<2)
                fout<<-1;
            else{
                fout<<*hp.rbegin()-*hp.begin()<<endl;
            }
        }
        if(cerinta=="MIN"){
            if(hp.size()<2)
                fout<<-1;
            else{
                minn();
                fout<<mind<<endl;
            }
        }
    }

    return 0;
}


/*#include <bits/stdc++.h>
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");

priority_queue<long long> pqmax;
priority_queue<long long> pqmin;

string cerinta;
long long n,u,pu;

int cauta(long long k){
    if(pqmax.empty()) return 0;
    else{
    stack<long long> st;
    while(pqmax.top()!=k and !pqmax.empty()){
        st.push(pqmax.top());
        pqmax.pop();
    }
    if(pqmax.empty()){
        while(!st.empty()){
        pqmax.push(st.top());
        st.pop();
        }
        return 0;
    }
    else{
     while(!st.empty()){
        pqmax.push(st.top());
        st.pop();
     }
     return 1;
    }
    }
}
int sterge(long long k){
    if(cauta(k)==1){
    stack<long long> stmax;
    stack<long long> stmin;
    while(pqmax.top()!=k and !pqmax.empty()){
        stmax.push(pqmax.top());
        pqmax.pop();
    }
    while(pqmin.top()!=-k and !pqmin.empty()){
        stmin.push(pqmin.top());
        pqmin.pop();
    }
     pqmax.pop();
     pqmin.pop();
     while(!stmax.empty()){
        pqmax.push(stmax.top());
        stmax.pop();
     }
     while(!stmin.empty()){
        pqmin.push(stmin.top());
        stmin.pop();
     }
     return 0;
    }
    else
        return -1;
}

long long MAX(){
    if(pqmax.size()<2)
        return -1;
    else{
        return pqmax.top()+pqmin.top();
    }
}

long long MIN(){
    long long minn=LONG_LONG_MAX;
    long long dif;
    if(pqmax.size()<2)
        return -1;
    else{
        vector<long long> aux;
        //cout<<pqmax.size()<<' ';
        while(!pqmax.empty()){
            aux.push_back(pqmax.top());
            pqmax.pop();
        }
        for(int i=0; i<aux.size()-1; i++){
            for(int j=i+1; j<aux.size(); j++){
                //cout<<aux[i]<<' ';
                dif=abs(aux[i]-aux[j]);
                if(dif<minn)
                    minn=dif;
            }
        }
        for(int i=0; i<aux.size(); i++){
            pqmax.push(aux[i]);
        }
        return minn;
    }
}

int main()
{
    while(fin>>cerinta){
        if(cerinta=="I"){
            fin>>n;
            //fout<<n<<endl;
            if(cauta(n)==0){
                pqmax.push(n);
                pqmin.push(-n);}
        }
        if(cerinta=="S"){
            fin>>n;
            //fout<<n<<endl;
            if(sterge(n)==-1)
                fout<<-1<<endl;
        }
        if(cerinta=="C"){
            fin>>n;
            //fout<<n<<endl;
            fout<<cauta(n)<<endl;
        }
        if(cerinta=="MAX"){
            fout<<MAX()<<endl;
        }
        if(cerinta=="MIN"){
            fout<<MIN()<<endl;
        }
    }

    /*while (!pqmax.empty()) {
        std::cout << pqmax.top() << " ";
        pqmax.pop();
    }*/

    //return 0;
//}