import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone {
static int COLORS_EXISTS = 10;
static class Interval {
int l, r;
public Interval(int l, int r) {
this.l = l;
this.r = r;
}
int length() {
}
}
static Interval getMinAllColorsSubArray(int[] arr) {
int r = -1;
int l = 0;
HashMap
<Integer, Integer
> colorsCount
= new HashMap
<>(); int differentColorsCount = 0;
Interval minSubArrayBounds = null;
while (differentColorsCount < COLORS_EXISTS && r < arr.length - 1) {
r++;
int rCol = arr[r];
if (!colorsCount.containsKey(rCol)) {
differentColorsCount++;
colorsCount.put(rCol, 1);
} else {
colorsCount.
merge(rCol,
1,
Integer::sum
); }
while (colorsCount.containsKey(arr[l]) && colorsCount.get(arr[l]) > 1) {
colorsCount.
merge(arr
[l
],
-1,
Integer::sum
); l++;
}
if (differentColorsCount == COLORS_EXISTS) {
Interval subArrayBounds = new Interval(l, r);
if (minSubArrayBounds == null || minSubArrayBounds.length() > subArrayBounds.length()) {
minSubArrayBounds = subArrayBounds;
}
}
}
return minSubArrayBounds;
}
{
int[] input = new int[]{1, 2, 3, 1, 1, 2, 1, 3, 2, 4, 5, 6, 7, 8, 9, 0, 0, 3, 4, 3, 9, 0};
Interval res = getMinAllColorsSubArray(input);
System.
out.
println(res.
l + " " + res.
r); }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgoKY2xhc3MgSWRlb25lIHsKCXN0YXRpYyBpbnQgQ09MT1JTX0VYSVNUUyA9IDEwOwogICAgCiAgICBzdGF0aWMgY2xhc3MgSW50ZXJ2YWwgewogICAgICAgIGludCBsLCByOwoKICAgICAgICBwdWJsaWMgSW50ZXJ2YWwoaW50IGwsIGludCByKSB7CiAgICAgICAgICAgIHRoaXMubCA9IGw7CiAgICAgICAgICAgIHRoaXMuciA9IHI7CiAgICAgICAgfQoKICAgICAgICBpbnQgbGVuZ3RoKCkgewogICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMociAtIGwpOwogICAgICAgIH0KICAgIH0KCiAgICBzdGF0aWMgSW50ZXJ2YWwgZ2V0TWluQWxsQ29sb3JzU3ViQXJyYXkoaW50W10gYXJyKSB7CiAgICAgICAgaW50IHIgPSAtMTsgCiAgICAgICAgaW50IGwgPSAwOwogICAgICAgIEhhc2hNYXA8SW50ZWdlciwgSW50ZWdlcj4gY29sb3JzQ291bnQgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgaW50IGRpZmZlcmVudENvbG9yc0NvdW50ID0gMDsKICAgICAgICBJbnRlcnZhbCBtaW5TdWJBcnJheUJvdW5kcyA9IG51bGw7CiAgICAgICAgCiAgICAgICAgd2hpbGUgKGRpZmZlcmVudENvbG9yc0NvdW50IDwgQ09MT1JTX0VYSVNUUyAmJiByIDwgYXJyLmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgcisrOwogICAgICAgICAgICBpbnQgckNvbCA9IGFycltyXTsKICAgICAgICAgICAgaWYgKCFjb2xvcnNDb3VudC5jb250YWluc0tleShyQ29sKSkgewogICAgICAgICAgICAgICAgZGlmZmVyZW50Q29sb3JzQ291bnQrKzsKICAgICAgICAgICAgICAgIGNvbG9yc0NvdW50LnB1dChyQ29sLCAxKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbG9yc0NvdW50Lm1lcmdlKHJDb2wsIDEsIEludGVnZXI6OnN1bSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHdoaWxlIChjb2xvcnNDb3VudC5jb250YWluc0tleShhcnJbbF0pICYmIGNvbG9yc0NvdW50LmdldChhcnJbbF0pID4gMSkgewogICAgICAgICAgICAJY29sb3JzQ291bnQubWVyZ2UoYXJyW2xdLCAtMSwgSW50ZWdlcjo6c3VtKTsKICAgICAgICAgICAgICAgIGwrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGRpZmZlcmVudENvbG9yc0NvdW50ID09IENPTE9SU19FWElTVFMpIHsKICAgICAgICAgICAgICAgIEludGVydmFsIHN1YkFycmF5Qm91bmRzID0gbmV3IEludGVydmFsKGwsIHIpOwogICAgICAgICAgICAgICAgaWYgKG1pblN1YkFycmF5Qm91bmRzID09IG51bGwgfHwgbWluU3ViQXJyYXlCb3VuZHMubGVuZ3RoKCkgPiBzdWJBcnJheUJvdW5kcy5sZW5ndGgoKSkgewogICAgICAgICAgICAgICAgICAgIG1pblN1YkFycmF5Qm91bmRzID0gc3ViQXJyYXlCb3VuZHM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG1pblN1YkFycmF5Qm91bmRzOwogICAgfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlpbnRbXSBpbnB1dCA9IG5ldyBpbnRbXXsxLCAyLCAzLCAxLCAxLCAyLCAxLCAzLCAyLCA0LCA1LCA2LCA3LCA4LCA5LCAwLCAwLCAzLCA0LCAzLCA5LCAwfTsKCQlJbnRlcnZhbCByZXMgPSBnZXRNaW5BbGxDb2xvcnNTdWJBcnJheShpbnB1dCk7CgkJU3lzdGVtLm91dC5wcmludGxuKHJlcy5sICsgIiAiICsgcmVzLnIpOwoJfQp9