Pagini recente » Cod sursa (job #677249) | Cod sursa (job #1817698) | Cod sursa (job #1518372) | Cod sursa (job #2049859) | Cod sursa (job #2899466)
#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;
}