Cod sursa(job #2460805)
Utilizator | Data | 24 septembrie 2019 14:37:54 | |
---|---|---|---|
Problema | Zeap | Scor | 20 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 2.89 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");
string s;
set <int> a;
multiset <int> dif;
set <int> :: iterator it, itr, itl;
int main()
{
while(fin >> s)
{
int x;
if(s == "I")
{
fin >> x;
it = a.insert(x).first;
if(a.size() == 1) continue;
itr = it;
itl = it;
itr++;
if(it == a.begin())
{
dif.insert(*itr-*it);
}
else
if(itr == a.end())
{
itl--;
dif.insert(*it-*itl);
}
else
{
itl--;
// if(dif.find(*itr-*itl) != dif.end())
dif.erase(dif.find(*itr-*itl));
dif.insert(*itr-*it);
dif.insert(*it-*itl);
}
}
else
if(s == "S")
{
fin >> x;
if(a.find(x) == a.end())
fout << -1 << '\n';
else
{
it = a.find(x);
itr = it;
itr++;
itl = it;
if(a.size() == 1) {a.erase(x); continue;}
if(itr != a.end())
{
//if(dif.find(*itr-*it) != dif.end())
dif.erase(dif.find(*itr-*it));
}
if(it != a.begin())
{
itl--;
//if(dif.find(*it-*itl) != dif.end())
dif.erase(dif.find(*it-*itl));
}
if(it != a.begin() && it != a.end())
dif.insert(*itr-*itl);
a.erase(x);
}
}
else
if(s == "MAX")
{
if(a.size() <= 1)
{
fout << -1 << '\n';
continue;
}
it = a.end();
it--;
fout << *it-*a.begin() << '\n';
}
else
if(s == "C")
{
fin >> x;
if(a.find(x) == a.end())
fout << 0 << '\n';
else
fout << 1 << '\n';
}
else
{
if(dif.size())
fout << *dif.begin() << '\n';
else
fout << -1 << '\n';
}
}
return 0;
}