Cod sursa(job #2899466)

Utilizator elenaaa15Dobre Elena elenaaa15 Data 8 mai 2022 20:34:45
Problema Zeap Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.99 kb
#include <iostream>
#include <fstream>
#include <string>
#include <queue>
#include <set>

using namespace std;

ifstream f("zeap.in");
ofstream g("zeap.out");

priority_queue<pair<int,pair<int,int>>, vector<pair<int,pair<int,int>>>, greater<pair<int,pair<int,int>>> > p;
set<int>::iterator i , st , dr;
set<int> zeap;
int x;
string str;
char c;

void insereaza()
{
    f>>x;

    if(zeap.count(x)==0)
    {
        zeap.insert(x);
        i = zeap.find(x);
        if(i != zeap.begin())
            {
                i--;
                p.push({x-*i,{*i, x}});
                i++;
            }

        if(++i != zeap.end())  p.push({*i -x,{*i, x}});
    }
}

void sterge()
{
    f >> x;

    if(zeap.count(x))
    {
        i = zeap.find(x);

        if (i!=zeap.begin())
		{
			i++;
			if (i!=zeap.end())
			{
				dr = i;
				i--;
				st = --i;
				p.push({*dr - *st,{*dr, *st}}); //daca avem 2 fii sa nu ratam diferenta minima dintre ei
			}
		}

		zeap.erase(x);
    }

    else
        g<<-1<<'\n';
}

void cauta()
{
    f>>x;
    if(zeap.find(x)!=zeap.end())
        g<<1<<'\n';
    else
        g<<0<<'\n';
}
void mindif()
{
    if(zeap.size() <= 1)
        g<<-1 <<'\n';
    else
    {
        while(!p.empty() && (zeap.find(p.top().second.first) == zeap.end() || zeap.find(p.top().second.second) == zeap.end()))
        {
            p.pop();
        }
        g<< p.top().first << '\n';
    }
}
void maxdif()
{
    if(zeap.size() <= 1)
        g<<-1 <<'\n';
    else
        g<< *(--zeap.end()) - *(zeap.begin()) << '\n';
}

int main()
{

    while(f>>str)
    {
        c = str[0];

        if(c == 'I')
            insereaza();

        if(c == 'S')
            sterge();

        if(c == 'C')
            cauta();

        if(c == 'M')
        {
            c = str[1];
            if(c == 'I')
                mindif();
            if(c == 'A')
                maxdif();
        }
    }

    return 0;
}