Cod sursa(job #3135517)

Utilizator iulia_tamasTamas Iulia iulia_tamas Data 3 iunie 2023 15:22:44
Problema Zeap Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.12 kb
#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();
     }
    }
    else
        return -1;
}

int main()
{
    while(fin>>cerinta){
        if(cerinta=="I"){
            fin>>n;
            //fout<<n<<endl;
            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"){
            //fin>>n;
            fout<<pqmax.top()+pqmin.top()<<endl;
        }
        if(cerinta=="MIN"){
            u=-pqmin.top();
            pqmin.pop();
            pu=-pqmin.top();
            pqmin.push(-u);
            fout<<pu-u<<endl;
        }
    }

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

    return 0;
}