Pagini recente » Cod sursa (job #1041992) | Cod sursa (job #2161316) | Cod sursa (job #29251) | Cod sursa (job #1047063) | Cod sursa (job #2897723)
#include <bits/stdc++.h>
using namespace std;
ifstream f("zeap.in");
ofstream g("zeap.out");
set <int> zeap;
struct compare
{
bool operator()(const pair<int,int> &a, const pair<int,int> &b) {
return abs(a.first - a.second) > abs(b.first - b.second);
}
};
priority_queue<pair<int,int>, vector<pair<int,int>>, compare> minidif;
void insereaza(int a)
{
if(zeap.count(a)==0)
{
zeap.insert(a);
set<int>::iterator x, y;
x=zeap.find(a);
y=zeap.find(a);
x++;
if(y!=zeap.begin())
{
y--;
minidif.push(make_pair(a, *y));
}
if(x!=zeap.end())
{
minidif.push(make_pair(*x, a));
}
}
}
int stergere(int a)
{
if(zeap.count(a)==0)
{
return -1;
}
else
{
set<int>::iterator x, y;
x=zeap.find(a);
y=zeap.find(a);
y++;
if(y!=zeap.end() and x!=zeap.begin())
{
x--;
minidif.push(make_pair(*y, *x));
}
zeap.erase(a);
return 1;
}
}
int cautare(int a)
{
return zeap.count(a);
}
int mindif()
{
if(zeap.size()<2)
return -1;
else
{
while(!(zeap.count(minidif.top().first)==1 && zeap.count(minidif.top().second)==1))
{
minidif.pop();
}
return abs(minidif.top().first-minidif.top().second);
}
}
int maxidif()
{
if(zeap.size()<2)
return -1;
else
{
set<int>::iterator x, y;
x=zeap.begin();
y=zeap.end();
y--;
return abs(*y-*x);
}
}
int main(){
int a;
string op;
while(f>>op){
if(op=="I"){
f>>a;
insereaza(a);
}
else if(op=="S"){
f>>a;
if(stergere(a)==-1)
g<<-1<<'\n';
}
else if(op=="C"){
f>>a;
g<<cautare(a)<<'\n';
}
else if(op=="MAX"){
g<<maxidif()<<'\n';
}
else if(op=="MIN"){
g<<mindif()<<'\n';
}
}
return 0;
}