import
java.util.ArrayList;
import
java.util.Arrays;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;
public
class
GFG {
static
long
findPairs(List<Integer> a,
int
n,
int
k)
{
Map<Integer, List<Integer> > m =
new
HashMap<>();
int
i =
0
;
while
(i < a.size()) {
m.computeIfAbsent(a.get(i),
key ->
new
ArrayList<>())
.add(i);
i++;
}
int
count =
0
;
for
(Map.Entry<Integer, List<Integer> > entry :
m.entrySet()) {
List<Integer> v = entry.getValue();
int
j =
0
;
while
(j < v.size()) {
int
index = lowerBound(v, v.get(j) + k);
count += v.size() - index;
j++;
}
}
return
count;
}
static
int
lowerBound(List<Integer> list,
int
target)
{
int
low =
0
, high = list.size();
while
(low < high) {
int
mid = low + (high - low) /
2
;
if
(list.get(mid) < target) {
low = mid +
1
;
}
else
{
high = mid;
}
}
return
low;
}
public
static
void
main(String[] args)
{
int
n =
5
;
int
k =
2
;
List<Integer> a = Arrays.asList(
1
,
2
,
1
,
2
,
1
);
System.out.println(findPairs(a, n, k));
}
}