Pagini recente » Cod sursa (job #2496485) | Cod sursa (job #3168482) | Cod sursa (job #660160) | Cod sursa (job #557320) | Cod sursa (job #2669682)
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define MAX(a, b) (((a) < (b)) ? (b) : (a))
//#pragma GCC optimize("O3")
using namespace std;
using namespace __gnu_pbds;
auto random_address = [] { char *p = new char; delete p; return uint64_t(p); };
const uint64_t SEED = chrono::steady_clock::now().time_since_epoch().count() * (random_address() | 1);
mt19937_64 rng(SEED);
typedef tree<
int,
null_type,
less<int>,
rb_tree_tag,
tree_order_statistics_node_update>
ordered_set;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
ifstream fin("zeap.in");
ofstream fout("zeap.out");
string str;
multiset<ll> difs;
set<ll> s;
const ll INF=1000000000000000000;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
while(fin>>str)
{
if(str=="I")
{
ll nr;
fin>>nr;
if(s.find(nr)==s.end())
{
s.insert(nr);
auto it=s.find(nr);
ll prev=INF,nxt=INF;
if(it!=s.begin())
{
it--;
prev=*it;
}
it=s.find(nr);
it++;
if(it!=s.end())
nxt=*it;
if(prev!=INF&&nxt!=INF)
difs.erase(difs.find(nxt-prev));
if(prev!=INF)
difs.insert(nr-prev);
if(nxt!=INF)
difs.insert(nxt-nr);
}
}
if(str=="S")
{
ll nr;
fin>>nr;
if(s.find(nr)==s.end())
{
fout<<-1<<'\n';
continue;
}
auto it=s.find(nr);
ll prev=INF,nxt=INF;
if(it!=s.begin())
{
it--;
prev=*it;
}
it=s.find(nr);
it++;
if(it!=s.end())
nxt=*it;
if(prev!=INF&&nxt!=INF)
difs.insert(nxt-prev);
if(prev!=INF)
difs.erase(difs.find(nr-prev));
if(nxt!=INF)
difs.erase(difs.find(nxt-nr));
}
if(str=="C")
{
ll nr;
fin>>nr;
if(s.find(nr)==s.end())
fout<<0<<'\n';
else
fout<<1<<'\n';
}
if(str=="MAX")
{
if(s.size()<=1)
{
fout<<-1<<'\n';
continue;
}
ll nr1=*s.begin();
auto it=s.end();
it--;
ll nr2=*it;
fout<<nr2-nr1<<'\n';
}
if(str=="MIN")
{
if(s.size()<=1)
{
cout<<-1<<'\n';
continue;
}
fout<<*difs.begin()<<'\n';
}
}
return 0;
}