#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
pair<int,int> A[MAXN];
long long seg[MAXN*4],lazy[MAXN*4];
void down(int pos,int l,int r)
{
int val=lazy[pos],mid=(l+r)/2;
seg[pos*2]+=val*(mid-l+1),seg[pos*2+1]+=val*(r-mid);
lazy[pos*2]+=val,lazy[pos*2+1]+=val;
lazy[pos]=0;
}
void update(int l,int r,int u,int v,int val,int pos)
{
if(v<l||r<u) return ;
if(u<=l&&r<=v)
{
seg[pos]+=val*(r-l+1),lazy[pos]+=val;
return ;
}
int mid=(l+r)/2;
down(pos,l,r);
update(l,mid,u,v,val,pos*2);
update(mid+1,r,u,v,val,pos*2+1);
seg[pos]=seg[pos*2]+seg[pos*2+1];
}
long long get(int l,int r,int u,int v,int pos)
{
if(u<=l&&r<=v) return seg[pos];
int mid=(l+r)/2;
down(pos,l,r);
if(v<=mid) return get(l,mid,u,v,pos*2);
if(mid+1<=u) return get(mid+1,r,u,v,pos*2+1);
return get(l,mid,u,v,pos*2)+get(mid+1,r,u,v,pos*2+1);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,N=100000;
cin>>n;
for(int i=1;i<=n;i++) cin>>A[i].first>>A[i].second;
sort(A+1,A+n+1);
priority_queue< int,vector<int>,greater<int> > pq;
long long ans=0;
for(int i=1;i<=n;i++)
{
ans+=get(1,N,A[i].first-A[i].second+1,A[i].first,1);
update(1,N,A[i].first-A[i].second+1,A[i].first,1,1);
if(A[i].second!=A[i].first)
{
int x=get(1,N,A[i].first-A[i].second+1,A[i].first-A[i].second+1,1);
int y=get(1,N,A[i].first-A[i].second,A[i].first-A[i].second,1);
if(y<x)
{
int l=1,r=A[i].first-A[i].second,pl=A[i].first-A[i].second,pr=pl+1;
while(l<=r)
{
int mid=(l+r)/2;
if(get(1,N,mid,mid,1)==y) r=mid-1,pl=mid;
else l=mid+1;
}
l=pr,r=A[i].first;
while(l<=r)
{
int mid=(l+r)/2;
if(get(1,N,mid,mid,1)==x) l=mid+1,pr=mid;
else r=mid-1;
}
update(1,N,A[i].first-A[i].second+1,pr,-1,1);
update(1,N,pl,pl+pr-A[i].first+A[i].second-1,1,1);
}
}
}
cout<<ans;
}