小红的区间删除
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小红有一个长度为 n 的数组 a,他想从 a 中删除一段区间,但又要使得剩余的部分拼起来组成的新数组满足:逆序对个数不少于 k

她想知道有多少种删除方案,请你帮帮她吧。
注:空数组逆序对数量为0。

输入描述:

输入包含两行。
第一行两个整数 n, k\ (1 \leq n \leq 2\times 10^5)\ (0 \leq k \leq n \cdot (n-1) / 2),分别表示数组 a 的长度和逆序对的个数下限。
第二行 n 个正整数 a_i\ (1 \leq a_i \leq 10^6),表示数组 a 的元素。

输出描述:

输出一行一个整数,表示删除方案。
(如果怎么删除都无法满足条件,输出 0 即可)
示例1

输入

复制
5 4
5 4 3 2 1

输出

复制
6

说明

可以删除:
[1, 1], [2, 2], [3, 3], [4, 4], [5, 5] 这五个区间,同时也可以一个区间都不删,也是一种方案,因此一共 6 种方案。

备注:

逆序对:数组中满足 (i < j)a_i > a_j(i, j) 对。