#include #include int n, a[300000], L[300000], R[300000], b[100][3000], bc[100]; int cmp(const void *x, const void *y) { return *(int *)x - *(int *)y; } int gt(int *a, int n, int x) { int l = -1; int r = n; while (r - l > 1) { int m = (r + l) / 2; if (a[m] >= x) { r = m; } else { l = m; } } return n - r; } int main(void) { scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", a + i); } for (int i = 0; i < n; i++) { scanf("%d %d", &L[i], &R[i]); b[i / 3000][i % 3000] = a[i] + R[i]; bc[i / 3000]++; } for (int i = 0; i < 100; i++) { qsort(b[i], bc[i], sizeof(int), cmp); } long long ans = 0; for (int i = 0; i < n; i++) { int j = i; while (j - 3000 >= 0 && a[j - 3000] >= a[i] - L[i]) j -= 3000; while (j - 1 >= 0 && a[j - 1] >= a[i] - L[i]) j -= 1; while (j < i) { if (j % 3000 == 0 && j + 3000 <= i) { ans += gt(b[j / 3000], bc[j / 3000], a[i]); j += 3000; } else { if (a[j] + R[j] >= a[i]) ans++; j += 1; } } } printf("%lld\n", ans); return 0; }