#include #include #include using namespace std; int merge_sort_count(vector &a, const int l, const int r, const int k) { if (r - l > 1) { int mid = l + (r - l) / 2; int count = 0; count += merge_sort_count(a, l, mid, k); count += merge_sort_count(a, mid, r, k); int i = l; for (int j = mid; j < r; j++) { while (i < mid && a[j] - a[i] >= k) { i++; } count += i - l; } inplace_merge(a.begin() + l, a.begin() + mid, a.begin() + r); return count; } return 0; } int merge_sort_count(vector &a, const int k) { const int n = a.size(); vector prefix_sum(n + 1); prefix_sum[0] = 0; for (int i = 0; i < n; i++) { prefix_sum[i + 1] = prefix_sum[i] + a[i]; } return merge_sort_count(prefix_sum, 0, n + 1, k); } int main(void) { int n; cin >> n; vector a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } int k; cin >> k; cout << merge_sort_count(a, k) << endl; return 0; }