给你一个仅包含英文小写字母的字符串 s,你可以交换任意两个相邻字母不超过 k 次,交换之后,字符串 s 中逆序对可能的最小数目是多少?
假如说字符串中有两个字母的下标分别是 i 和 j,这两个字母相邻当且仅当 ∣i−j∣=1。
字符串中的一个逆序对是指字符串中存在下标为 i 和 j 的两个字母 s[i] 和 s[j],有 s[i]>s[j] 且 1≤i<j≤n。
字符的大小是根据ASCII值决定的,例如 ′z′>′x′。
第一行输入两个整数 n(1≤n≤2×105) 和 k(0≤k≤109),代表字符串的长度和最多的交换次数 。
第二行输入一个长度为 n 的字符串 s。
输出一个整数,代表交换相邻字符不超过 k 次的后字符串最少的逆序对数量。
输入样例1
5 2
acbeb
输出样例1
1
输入样例2
4 4
dcba
输出样例2
2
提示
对于第 1 组样例,首先交换下标为 2 和 3 的字符,然后交换下标为 4 和 5 的字符,交换结束后字符串变为 abcbe,逆序对有 1 对,即 i=3,j=4。
考虑到答案可能很大,你可能需要使用可以存储 64 位整数的数据类型来表示答案,比如 C++ 中的 long long。