Problem:
Score : 600 points

Problem Statement

You are given an integer sequence of length N, a = {a_1, a_2, …, a_N}, and an integer K.

a has N(N+1)/2 non-empty contiguous subsequences, {a_l, a_{l+1}, …, a_r} (1 ≤ l ≤ r ≤ N). Among them, how many have an arithmetic mean that is greater than or equal to K?

Constraints

All input values are integers.

1 ≤ N ≤ 2 \times 10^5

1 ≤ K ≤ 10^9

1 ≤ a_i ≤ 10^9

Input

Input is given from Standard Input in the following format:

N K
a_1
a_2
:
a_N

Output

Print the number of the non-empty contiguous subsequences with an arithmetic mean that is greater than or equal to K.

Sample Input 1

3 6
7
5
7

Sample Output 1

5

All the non-empty contiguous subsequences of a are listed below:

{a_1} = {7}

{a_1, a_2} = {7, 5}

{a_1, a_2, a_3} = {7, 5, 7}

{a_2} = {5}

{a_2, a_3} = {5, 7}

{a_3} = {7}

Their means are 7, 6, 19/3, 5, 6 and 7, respectively, and five among them are 6 or greater. Note that {a_1} and {a_3} are indistinguishable by the values of their elements, but we count them individually.

Sample Input 2

1 2
1

Sample Output 2

0

Sample Input 3

7 26
10
20
30
40
30
20
10

Sample Output 3

13

Solution in Java8 (OpenJDK 1.8.0) (judge verdict: Wrong Answer)

import java.util.*;
 
public class Main {
  static int N;
  static int[] bit;
 
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    N = sc.nextInt();
    int K = sc.nextInt();
    long s = 0;
    long[] sList = new long[N];
    ArrayList<Long> list = new ArrayList<Long>();
    list.add(s);
 //   for(int i = 0; i < N; i++) {
//      long a = sc.nextLong();
//      a -= K;
//      s += a;
 //     sList[i] = s;
 //     if(!(list.contains(s))) list.add(s);
//    }
//    Collections.sort(list);
    HashMap<Long, Integer> map = new HashMap<Long, Integer>();
    int index = 1;
    for(int i = 0; i < list.size(); i++) {
      map.put(list.get(i), index);
      index++;
    }
    bit = new int[N + 2];
    add(map.get((long)0), 1);
    long ans = 0;
    for(int i = 0; i < N; i++) {
      int l = map.get(sList[i]);
      ans += sum(l);
     add(l, 1);
    }
    System.out.println(ans);
  }
 
  static void add(int a, int w) {
    for(int x = a; x <= N + 1; x += x & -x) bit[x] += w;
  }
 
  static int sum(int a) {
    int ret = 0;
    for(int x = a; x > 0; x -= x & -x) ret += bit[x];
    return ret;
  }
}