Cod sursa(job #1943773)

Utilizator andreigasparoviciAndrei Gasparovici andreigasparovici Data 28 martie 2017 20:01:06
Problema Zeap Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;

set<int> heap;
char line[1000];

int abs(int x)
{
    if(x>=0)
        return x;
    return -1 * x;
}

int main()
{
    freopen("zeap.in","r",stdin);
    freopen("zeap.out","w",stdout);
    while(fgets(line,1000,stdin))
    {
        char *p = strtok(line," \n");
        if(!strcmp(p,"I"))
        {
            int param;
            p = strtok(NULL," \n");
            sscanf(p,"%d",&param);
            heap.insert(param);
        }
        else if(!strcmp(p,"S"))
        {
            int param;
            p = strtok(NULL," \n");
            sscanf(p,"%d",&param);
            if(heap.find(param)!=heap.end())
                heap.erase(param);
            else printf("-1\n");
        }
        else if(!strcmp(p,"C"))
        {
            int param;
            p = strtok(NULL," \n");
            sscanf(p,"%d",&param);
            printf("%d\n",heap.find(param)!=heap.end());
        }
        else if(!strcmp(p,"MAX"))
        {
            printf("%d\n",*(heap.rbegin())-*(heap.begin()));
        }
        else if(!strcmp(p,"MIN"))
        {
            auto it = heap.begin(), it1 = it, it2=it1;
            int k = heap.size();


            advance(it,k/2);
            advance(it1,k/2-1);

            if(k%2==0)
                printf("%d\n",abs(*it-*it1));
            else
            {
                advance(it2,k/2+1);
                printf("%d\n",min(abs(*it-*it1),abs(*it-*it2)));
            }

        }
    }
    return 0;
}