import java.util.*;
public class Main {
static class OrderedMultiSet<E extends Comparable<E>> {
private final TreeMap<E, Integer> freqMap;
public OrderedMultiSet() {
freqMap = new TreeMap<>();
}
public void insert(E val) {
freqMap.put(val, freqMap.getOrDefault(val, 0) + 1);
}
public void erase(E val) {
if (freqMap.containsKey(val)) {
int cnt = freqMap.get(val);
if (cnt > 1) {
freqMap.put(val, cnt - 1);
} else {
freqMap.remove(val);
}
}
}
public E min() {
return freqMap.firstKey();
}
public E max() {
return freqMap.lastKey();
}
public Iterator<E> iterator() {
return new Iterator<E>() {
private final Iterator
<Map.
Entry<E, Integer
>> itr
= freqMap.
entrySet().
iterator();
@Override
public boolean hasNext() {
return itr.hasNext();
}
@Override
public E next() {
return itr.next().getKey();
}
};
}
}
public static void main
(String[] args
) { Scanner in
= new Scanner
(System.
in); int length = in.nextInt();
int limit = in.nextInt();
in.nextLine();
OrderedMultiSet<Character> window = new OrderedMultiSet<>();
int bestLen = 0;
int leftPtr = 0;
for (int rightPtr = 0; rightPtr < length; rightPtr++) {
window.insert(str.charAt(rightPtr));
while (window.max() - window.min() > limit) {
window.erase(str.charAt(leftPtr));
leftPtr++;
}
bestLen
= Math.
max(bestLen, rightPtr
- leftPtr
+ 1); }
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKcHVibGljIGNsYXNzIE1haW4gewoKICAgIHN0YXRpYyBjbGFzcyBPcmRlcmVkTXVsdGlTZXQ8RSBleHRlbmRzIENvbXBhcmFibGU8RT4+IHsKICAgICAgICBwcml2YXRlIGZpbmFsIFRyZWVNYXA8RSwgSW50ZWdlcj4gZnJlcU1hcDsKCiAgICAgICAgcHVibGljIE9yZGVyZWRNdWx0aVNldCgpIHsKICAgICAgICAgICAgZnJlcU1hcCA9IG5ldyBUcmVlTWFwPD4oKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyB2b2lkIGluc2VydChFIHZhbCkgewogICAgICAgICAgICBmcmVxTWFwLnB1dCh2YWwsIGZyZXFNYXAuZ2V0T3JEZWZhdWx0KHZhbCwgMCkgKyAxKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyB2b2lkIGVyYXNlKEUgdmFsKSB7CiAgICAgICAgICAgIGlmIChmcmVxTWFwLmNvbnRhaW5zS2V5KHZhbCkpIHsKICAgICAgICAgICAgICAgIGludCBjbnQgPSBmcmVxTWFwLmdldCh2YWwpOwogICAgICAgICAgICAgICAgaWYgKGNudCA+IDEpIHsKICAgICAgICAgICAgICAgICAgICBmcmVxTWFwLnB1dCh2YWwsIGNudCAtIDEpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBmcmVxTWFwLnJlbW92ZSh2YWwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgRSBtaW4oKSB7CiAgICAgICAgICAgIHJldHVybiBmcmVxTWFwLmZpcnN0S2V5KCk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgRSBtYXgoKSB7CiAgICAgICAgICAgIHJldHVybiBmcmVxTWFwLmxhc3RLZXkoKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBJdGVyYXRvcjxFPiBpdGVyYXRvcigpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBJdGVyYXRvcjxFPigpIHsKICAgICAgICAgICAgICAgIHByaXZhdGUgZmluYWwgSXRlcmF0b3I8TWFwLkVudHJ5PEUsIEludGVnZXI+PiBpdHIgPSBmcmVxTWFwLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKCiAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGhhc05leHQoKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ci5oYXNOZXh0KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICBwdWJsaWMgRSBuZXh0KCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBpdHIubmV4dCgpLmdldEtleSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgU2Nhbm5lciBpbiA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CiAgICAgICAgaW50IGxlbmd0aCA9IGluLm5leHRJbnQoKTsKICAgICAgICBpbnQgbGltaXQgPSBpbi5uZXh0SW50KCk7CiAgICAgICAgaW4ubmV4dExpbmUoKTsKICAgICAgICBTdHJpbmcgc3RyID0gaW4ubmV4dExpbmUoKTsKCiAgICAgICAgT3JkZXJlZE11bHRpU2V0PENoYXJhY3Rlcj4gd2luZG93ID0gbmV3IE9yZGVyZWRNdWx0aVNldDw+KCk7CiAgICAgICAgaW50IGJlc3RMZW4gPSAwOwogICAgICAgIGludCBsZWZ0UHRyID0gMDsKCiAgICAgICAgZm9yIChpbnQgcmlnaHRQdHIgPSAwOyByaWdodFB0ciA8IGxlbmd0aDsgcmlnaHRQdHIrKykgewogICAgICAgICAgICB3aW5kb3cuaW5zZXJ0KHN0ci5jaGFyQXQocmlnaHRQdHIpKTsKICAgICAgICAgICAgd2hpbGUgKHdpbmRvdy5tYXgoKSAtIHdpbmRvdy5taW4oKSA+IGxpbWl0KSB7CiAgICAgICAgICAgICAgICB3aW5kb3cuZXJhc2Uoc3RyLmNoYXJBdChsZWZ0UHRyKSk7CiAgICAgICAgICAgICAgICBsZWZ0UHRyKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYmVzdExlbiA9IE1hdGgubWF4KGJlc3RMZW4sIHJpZ2h0UHRyIC0gbGVmdFB0ciArIDEpOwogICAgICAgIH0KCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGJlc3RMZW4pOwogICAgfQp9Cg==