#include #define int long long using namespace std; const int N=300010; const int INF=0x3f3f3f3f3f3f3f3f; int n; int ans; int a[N],l[N],r[N]; vector >Q[N]; struct BIT{ int t[N]; int lowbit(int x){return x&-x;} void update(int x,int y){ for(int i=x;i<=n;i+=lowbit(i))t[i]+=y; return; } int ask(int x){ int res=0; for(int i=x;i>=1;i-=lowbit(i))res+=t[i]; return res; } int query(int l,int r){ return ask(r)-ask(l-1); } }T; signed main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++){ cin>>l[i]>>r[i]; l[i]=a[i]-l[i]; r[i]=a[i]+r[i]; l[i]=lower_bound(a+1,a+n+1,l[i])-a; r[i]=upper_bound(a+1,a+n+1,r[i])-a-1; } for(int i=1;i<=n;i++){ //[x,i) r[j]>=i Q[l[i]-1].push_back(make_pair(i,-1)); Q[i-1].push_back(make_pair(i,1)); } for(int i=1;i<=n;i++){ T.update(r[i],1); for(auto q:Q[i]){ int tar=q.first; int s=q.second; ans+=s*T.query(tar,n); } } cout<