#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
inline int read()
{
int s=0,w=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9')s=(s<<1)+(s<<3)+(ch^48),ch=getchar();
return s*w;
}
int n,cnt,now,ans;
int v[N],sz[N],ch[N][2],root,dat[N];
int New(int val)
{
sz[++cnt]=1;
v[cnt]=val;
dat[cnt]=rand();
return cnt;
}
void pushup(int x)
{
sz[x]=sz[ch[x][0]]+sz[ch[x][1]]+1;
}
int merge(int x,int y)
{
if(!x||!y)return x|y;
if(dat[x]<dat[y])
{
ch[x][1]=merge(ch[x][1],y);
pushup(x);
return x;
}
else
{
ch[y][0]=merge(x,ch[y][0]);
pushup(y);
return y;
}
}
void split(int rt,int val,int &x,int &y)
{
if(!rt)
{
x=y=0;
}
else
{
if(v[rt]<=val)
{
x=rt;
split(ch[rt][1],val,ch[rt][1],y);
}
else
{
y=rt;
split(ch[rt][0],val,x,ch[rt][0]);
}
pushup(rt);
}
}
void del(int v)
{
int x,y,z;
split(root,v,x,y);
split(x,v-1,x,z);
root=merge(x,y);
}
void ins(int val)
{
int x,y,z;
split(root,val,x,y);
split(x,val-1,x,z);
root=merge(merge(x,New(val)),y);
}
int prem(int val)
{
int x=0,y=0,z=0,res=0x3f3f3f3f;
split(root,val-1,x,y);
z=x;
while(z)
{
res=v[z];
z=ch[z][1];
}
root=merge(x,y);
return res;
}
int netm(int val)
{
int x=0,y=0,z=0,res=0x3f3f3f3f;
split(root,val,x,y);
z=y;
while(z)
{
res=v[z];
z=ch[z][0];
}
root=merge(x,y);
return res;
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
{
int opt=read(),b=read();
if(opt==0)
{
if(now<0)
{
int v1=prem(b),v2=netm(b);
if(b-v1==v2-b)
{
ans+=abs(b-v1);
if(v1!=0x3f3f3f3f)del(v1);
}
else
{
if(abs(b-v1)>abs(v2-b))
{
ans+=abs(v2-b);if(v2!=0x3f3f3f3f)del(v2);
}
else
{
ans+=abs(v1-b);if(v1!=0x3f3f3f3f)del(v1);
}
}
}
else
{
ins(b);
}
}
else
{
if(now>0)
{
int v1=prem(b),v2=netm(b);
if(v1-b==v2-b)
{
ans+=abs(b-v1);if(v1!=0x3f3f3f3f)del(v1);
}
else
{
if(abs(b-v1)>abs(v2-b))
{
ans+=abs(v2-b);if(v2!=0x3f3f3f3f)del(v2);
}
else
{
ans+=abs(b-v1);if(v1!=0x3f3f3f3f)del(v1);
}
}
}
else ins(b);
}
if(opt==0)
{
now++;
}
else now--;
}
cout<<ans;
return 0;
}