#include <iostream>
#include <fstream>
#include <algorithm>
#include <map>
using namespace std;
ifstream f("zeap.in");
ofstream g("zeap.out");
int mn[1000005],mx[1000005],dif[1000005],n,val,v[300005],query[300005];
int rez,x,k,ch,line,nr,val,fr[300005]; string s,t[300005];
map<int,int> mp;
void citire()
{
while(getline(f,s))
{
ch=0; ++line;
while(s[ch]<='Z' && s[ch]>='A')
{
t[line]+=s[ch];
++ch;
}
if(t[line].size()==1)
{
++ch;
while(s[ch]<='9' && s[ch]>='0')
{
query[line]=query[line]*10+s[ch]-'0';
++ch;
}
v[++k]=query[line];
}
}
}
void normalizare()
{
sort(v+1,v+k+1);
for(int i=1;i<=k;++i)
{
if(v[i]!=v[i-1])
{
++n;
mp[v[i]]=n;
fr[n]=v[i];
}
}
for(int i=1;i<=line;++i)
{
if(query[i]!=0) query[i]=mp[query[i]];
}
}
void update(int nod,int lt,int rt,int poz)
{
if(lt==rt)
{
mn[nod]=mx[nod]=val;
return;
}
int md=(lt+rt)/2;
if(poz<=md) update(nod*2,lt,md,poz);
else update(nod*2+1,md+1,rt,poz);
mn[arb]=min(mn[arb*2],mn[arb*2+1]); if(mn[arb]==0) mn[arb]=mn[arb*2]+mn[arb*2+1];
mx[arb]=max(mx[arb*2],mx[arb*2+1]);
}
void upddif(int nod,int lt,int rt,int poz)
{
if(lt==rt)
{
dif[arb]+=val;
return;
}
int md=(lt+rt)/2;
if(poz<=md) upddif(nod*2,lt,md,poz);
else update(nod*2+1,md+1,rt,poz);
///conditie
}
void add(int x)
{
val=x; ++nr; update(1,1,n,x);
if(nr>1)
{
i1=i2=0;
query1(1,1,n); ///cel mai mare numar mai mic decat x in i1
query2(1,1,n); ///cel mai mic numar mai mare decat x
if(i1 && i2)
{
val=-1; upddif(1,1,n,i2-i1);
val=1; upddif(1,1,n,i2-x); upddif(1,1,n,x-i1);
}
}
}
int main()
{
citire();
normalizare();
for(int i=1;i<=line;++i)
{
if(t[i]=='I') add(query[i]);
}
return 0;
}