#include <bits/stdc++.h>
#define VuDucNam ios_base::sync_with_stdio(false);
#define Lop9a6 cin.tie(NULL);
#define THCSPhamVanDong cout.tie(NULL);
#define ll long long
#define el cout << '\n'
#define sz(a) (ll)a.size()
#define all(a) a.begin(), a.end()
#define file(name) \
if (fopen(name ".inp", "r")) \
{ \
freopen(name ".inp", "r", stdin); \
freopen(name ".out", "w", stdout); \
}
#define TIME (1.0 * clock() / CLOCKS_PER_SEC)
#define RUNTIME cerr << "\nRuntime: " << TIME << "s.\n"
using namespace std;
const int N5 = 1e5 + 5;
int n;
ll s, pre[N5], cnt;
map<ll, int> freq; // Lưu tần suất các giá trị pre[j]
void solve()
{
cin >> n >> s;
for (int i = 1; i <= n; ++i)
{
ll x;
cin >> x;
pre[i] = pre[i - 1] + x;
}
// Thêm pre[0] = 0 vào map
freq[0]++;
for (int i = 1; i <= n; ++i)
{
// Tìm số phần tử nhỏ hơn pre[i] - s
auto it1 = freq.lower_bound(pre[i] - s);
if (it1 != freq.begin())
{
cnt += distance(freq.begin(), it1);
}
// Tìm số phần tử lớn hơn pre[i] + s
auto it2 = freq.upper_bound(pre[i] + s);
if (it2 != freq.end())
{
cnt += distance(it2, freq.end());
}
// Thêm pre[i] vào map
freq[pre[i]]++;
}
cout << cnt;
el;
}
int main()
{
VuDucNam Lop9a6 THCSPhamVanDong
file("code");
solve();
RUNTIME;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgVnVEdWNOYW0gaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiNkZWZpbmUgTG9wOWE2IGNpbi50aWUoTlVMTCk7CiNkZWZpbmUgVEhDU1BoYW1WYW5Eb25nIGNvdXQudGllKE5VTEwpOwojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwojZGVmaW5lIHN6KGEpIChsbClhLnNpemUoKQojZGVmaW5lIGFsbChhKSBhLmJlZ2luKCksIGEuZW5kKCkKI2RlZmluZSBmaWxlKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGlmIChmb3BlbihuYW1lICIuaW5wIiwgInIiKSkgICAgICAgICAgIFwKICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBmcmVvcGVuKG5hbWUgIi5pbnAiLCAiciIsIHN0ZGluKTsgIFwKICAgICAgICBmcmVvcGVuKG5hbWUgIi5vdXQiLCAidyIsIHN0ZG91dCk7IFwKICAgIH0KI2RlZmluZSBUSU1FICgxLjAgKiBjbG9jaygpIC8gQ0xPQ0tTX1BFUl9TRUMpCiNkZWZpbmUgUlVOVElNRSBjZXJyIDw8ICJcblJ1bnRpbWU6ICIgPDwgVElNRSA8PCAicy5cbiIKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTjUgPSAxZTUgKyA1OwoKaW50IG47CmxsIHMsIHByZVtONV0sIGNudDsKbWFwPGxsLCBpbnQ+IGZyZXE7IC8vIEzGsHUgdOG6p24gc3XhuqV0IGPDoWMgZ2nDoSB0cuG7iyBwcmVbal0KCnZvaWQgc29sdmUoKQp7CiAgICBjaW4gPj4gbiA+PiBzOwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkKICAgIHsKICAgICAgICBsbCB4OwogICAgICAgIGNpbiA+PiB4OwogICAgICAgIHByZVtpXSA9IHByZVtpIC0gMV0gKyB4OwogICAgfQoKICAgIC8vIFRow6ptIHByZVswXSA9IDAgdsOgbyBtYXAKICAgIGZyZXFbMF0rKzsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpCiAgICB7CiAgICAgICAgLy8gVMOsbSBz4buRIHBo4bqnbiB04butIG5o4buPIGjGoW4gcHJlW2ldIC0gcwogICAgICAgIGF1dG8gaXQxID0gZnJlcS5sb3dlcl9ib3VuZChwcmVbaV0gLSBzKTsKICAgICAgICBpZiAoaXQxICE9IGZyZXEuYmVnaW4oKSkKICAgICAgICB7CiAgICAgICAgICAgIGNudCArPSBkaXN0YW5jZShmcmVxLmJlZ2luKCksIGl0MSk7CiAgICAgICAgfQoKICAgICAgICAvLyBUw6xtIHPhu5EgcGjhuqduIHThu60gbOG7m24gaMahbiBwcmVbaV0gKyBzCiAgICAgICAgYXV0byBpdDIgPSBmcmVxLnVwcGVyX2JvdW5kKHByZVtpXSArIHMpOwogICAgICAgIGlmIChpdDIgIT0gZnJlcS5lbmQoKSkKICAgICAgICB7CiAgICAgICAgICAgIGNudCArPSBkaXN0YW5jZShpdDIsIGZyZXEuZW5kKCkpOwogICAgICAgIH0KCiAgICAgICAgLy8gVGjDqm0gcHJlW2ldIHbDoG8gbWFwCiAgICAgICAgZnJlcVtwcmVbaV1dKys7CiAgICB9CgogICAgY291dCA8PCBjbnQ7CiAgICBlbDsKfQoKaW50IG1haW4oKQp7CiAgICBWdUR1Y05hbSBMb3A5YTYgVEhDU1BoYW1WYW5Eb25nCiAgICBmaWxlKCJjb2RlIik7CiAgICBzb2x2ZSgpOwogICAgUlVOVElNRTsKICAgIHJldHVybiAwOwp9Cg==