Cod sursa(job #2893469)

Utilizator Stefania_RincuRincu Stefania Stefania_Rincu Data 25 aprilie 2022 22:58:01
Problema Zeap Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.65 kb
#include <iostream>
#include <fstream>
#include <set>
#include <queue>

using namespace std;


bool comp(const pair<int,int> &a,const pair<int,int> &b)
{

    return a.second-a.first < b.second-b.first;

}

priority_queue < pair<int,int>, vector<pair<int,int>>, decltype(&comp)> dif(comp);
set<int>::iterator p, u;

int main()
{
    ifstream in("zeap.in");
    ofstream out("zeap.out");

    set <int> myheap;
    int x;
    string op;

    while(in>>op){
        if(op[0] == 'I'){
            in>>x;
            auto i = myheap.find(x);
            if(i == myheap.end())
            {
                myheap.insert(x);
                i = myheap.find(x);
                if(i != myheap.begin())
                {
                    auto j = i;
                    j--;
                    dif.push(make_pair(*i, *j));
                }
                auto k = i;
                k++;
                if(k != myheap.end())
                    dif.push(make_pair(*k, *i));
            }
        }
           else if(op[0] == 'S'){
                in>>x;
                auto i = myheap.find(x);
                if(i !=myheap.end())
                {
                    auto k = i;
                    k++;
                    if(i != myheap.begin() && k != myheap.end())
                    {
                        i--;
                        dif.push(make_pair(*k, *i));
                    }
                    myheap.erase(x);
                }
                    else out<<-1<<'\n';
            }
              else if(op[0] == 'C'){
                    int x;
                    in>>x;
                    if(myheap.find(x) != myheap.end())out<<1<<'\n';
                        else out<<0<<'\n';
              }
                else if(op[1] == 'I'){
                    if(myheap.size() < 2) out<<-1<<'\n';
                        else{
                            while(myheap.find(dif.top().first) == myheap.end() || myheap.find(dif.top().second) == myheap.end()){
                                dif.pop();}
                            out<<dif.top().first - dif.top().second<<'\n';
                        }
                }
                    else if(op[1] == 'A'){
                        if(myheap.size() < 2) out<<-1<<'\n';
                            else{
                                int i, j;
                                p = myheap.begin();
                                u = myheap.end();
                                u--;
                                out<<(*u - *p)<<'\n';
                            }
                    }
    }
    out.close();
    in.close();
    return 0;
}