#include <bits/stdc++.h>
using namespace std;
const int N=100050;
const int M=2*N;
int n,h[N],k[N],ord[N];
int root,tsz,ls[M],rs[M],st[M];
void Set(int&c,int ss,int se,int qs,int qe,int x){
if(!c)c=++tsz;
if(ss>se||ss>qe||se<qs)return;
if(qs<=ss&&se<=qe){st[c]+=x;return;}
int mid=ss+se>>1;
Set(ls[c],ss,mid,qs,qe,x);
Set(rs[c],mid+1,se,qs,qe,x);
}
int Get(int c,int ss,int se,int qi){
if(!c||ss>se||se<qi||ss>qi)return 0;
if(ss==se)return st[c];
int mid=ss+se>>1;
return Get(ls[c],ss,mid,qi)+Get(rs[c],mid+1,se,qi)+st[c];
}
int FindL(int v,int mx){
int l=1,r=mx,pos=mx;
while(l<=r){
int mid=l+r>>1;
if(Get(root,1,N,mid)<=v)pos=mid,r=mid-1;
else l=mid+1;
}
assert(pos!=-1);
return pos;
}
int FindR(int v,int mx){
int l=1,r=mx,pos=mx;
while(l<=r){
int mid=l+r>>1;
if(Get(root,1,N,mid)>=v)pos=mid,l=mid+1;
else r=mid-1;
}
assert(pos!=-1);
return pos;
}
int main(){
scanf("%i",&n);
for(int i=1;i<=n;i++)scanf("%i %i",&h[i],&k[i]),ord[i]=i;
sort(ord+1,ord+1+n,[&](int i,int j){return h[i]<h[j];});
for(int i=1;i<=n;i++){
int j=ord[i];
int v=Get(root,1,N,h[j]-k[j]+1);
int L=FindL(v,h[j]),R=FindR(v,h[j]);
if(R==h[j]){
Set(root,1,N,L,L+k[j]-1,1);
}else{
Set(root,1,N,R+1,h[j],1);
k[j]-=(h[j]-R);
Set(root,1,N,L,L+k[j]-1,1);
}
}
long long ans=0;
for(int i=1;i<=N;i++){
long long c=Get(root,1,N,i);
ans+=c*(c-1)/2;
}
printf("%lld",ans);
return 0;
}