← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func readInt(reader *bufio.Reader) int64 {
	var n int64
	var sign int64 = 1
	var b byte
	var err error
	for {
		b, err = reader.ReadByte()
		if err != nil {
			return 0
		}
		if b == '-' {
			sign = -1
			continue
		}
		if b >= '0' && b <= '9' {
			n = int64(b - '0')
			break
		}
	}
	for {
		b, err = reader.ReadByte()
		if err != nil || b < '0' || b > '9' {
			break
		}
		n = n*10 + int64(b-'0')
	}
	return n * sign
}

func mergeSortAndCount(S []int64, t int64, temp []int64) int64 {
	if len(S) <= 1 {
		return 0
	}
	mid := len(S) / 2
	left := S[:mid]
	right := S[mid:]

	count := mergeSortAndCount(left, t, temp) + mergeSortAndCount(right, t, temp)

	i := 0
	for j := 0; j < len(right); j++ {
		for i < len(left) && left[i] <= right[j]-t {
			i++
		}
		count += int64(len(left) - i)
	}

	i = 0
	j := 0
	k := 0
	for i < len(left) && j < len(right) {
		if left[i] <= right[j] {
			temp[k] = left[i]
			i++
		} else {
			temp[k] = right[j]
			j++
		}
		k++
	}
	for i < len(left) {
		temp[k] = left[i]
		i++
		k++
	}
	for j < len(right) {
		temp[k] = right[j]
		j++
		k++
	}
	copy(S, temp[:len(S)])
	return count
}

func main() {
	reader := bufio.NewReaderSize(os.Stdin, 65536)
	n := int(readInt(reader))
	t := readInt(reader)

	S := make([]int64, n+1)
	for i := 1; i <= n; i++ {
		S[i] = S[i-1] + readInt(reader)
	}

	temp := make([]int64, n+1)
	ans := mergeSortAndCount(S, t, temp)
	fmt.Println(ans)
}