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