Cod sursa(job #2897531)

Utilizator bogdanputineluBogdan Putinelu bogdanputinelu Data 3 mai 2022 23:14:35
Problema Zeap Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.29 kb
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,pair<int,int>> Pair;
set<int> zeap;
priority_queue<Pair,vector<Pair>,greater<Pair>> dif;
int main(){
    ifstream f("D:\\un alt proiect c++\\input.in");
    ofstream g("D:\\un alt proiect c++\\output.out");
    int x;
    string s;
    while(f>>s){
        if(s[0]=='I'){
            f>>x;
            if(zeap.find(x)==zeap.end()){
                zeap.insert(x);
                auto index=zeap.find(x);
                if(index!=zeap.begin()){
                    auto fiu=index;
                    fiu--;
                    dif.push(make_pair(*index-*fiu, make_pair(*fiu,*index)));
                }
                if(index!= --zeap.end()){
                    auto fiu=index;
                    fiu++;
                    dif.push(make_pair(*fiu-*index, make_pair(*index,*fiu)));
                }

            }
        }
        else
            if(s[0]=='S'){
                f>>x;
                if(zeap.find(x)==zeap.end())
                    g<<"-1\n";
                else{
                    auto index=zeap.find(x);
                    if(index!=zeap.begin() && ++index !=zeap.end()){
                        auto fiud=index--;
                        auto fius=--index;
                        dif.push(make_pair(*fiud-*fius, make_pair(*fius,*fiud)));
                    }
                    zeap.erase(x);
                }
            }
            else
                if(s[0]=='C'){
                    f>>x;
                    if(zeap.find(x)==zeap.end())
                        g<<"0\n";
                    else
                        g<<"1\n";
                }
                else
                    if(s[1]=='A'){
                        if(zeap.size()<2)
                            g<<"-1\n";
                        else
                            g<<*zeap.rbegin()-*zeap.begin()<<'\n';
                    }
                    else{
                        if(zeap.size()<2)
                            g<<"-1\n";
                        else{
                            while (zeap.find(dif.top().second.first)==zeap.end() || zeap.find(dif.top().second.second)==zeap.end())
                                dif.pop();
                            g<<dif.top().first<<'\n';
                        }
                    }
    }
    return 0;
}