import
java.util.*;
class
solution
{
static
int
findElement(
int
[] arr,
int
[] left,
int
[] right,
int
n,
int
l,
int
r,
int
k)
{
int
mid = (l -
1
+ r -
1
) /
2
;
int
s = Math.max(mid - left[mid] +
1
, l -
1
);
int
e = Math.min(right[mid] + mid -
1
, r -
1
);
int
range = e - s +
1
;
if
(range >= k)
return
arr[mid];
else
return
-
1
;
}
static
int
answerQuery(
int
arr[],
int
n,
int
l,
int
r,
int
k)
{
int
[] left =
new
int
[n];
int
[] right =
new
int
[n];
int
count =
1
;
for
(
int
i =
0
; i < n -
1
; i++) {
if
(arr[i] == arr[i +
1
]) {
left[i] = count;
count++;
}
else
{
left[i] = count;
count =
1
;
}
}
left[n -
1
] = count;
count =
1
;
for
(
int
i = n -
1
; i >
0
; i--) {
if
(arr[i] == arr[i -
1
]) {
right[i] = count;
count++;
}
else
{
right[i] = count;
count =
1
;
}
}
right[
0
] = count;
return
findElement(arr, left, right, n, l, r, k);
}
public
static
void
main(String args[])
{
int
[] a = {
3
,
2
,
1
,
1
,
2
,
2
,
2
,
2
};
int
n = a.length;
int
L =
2
, R =
6
, k =
3
;
System.out.println(answerQuery(a, n, L, R, k));
L =
3
;
R =
8
;
k =
4
;
System.out.println(answerQuery(a, n, L, R, k));
}
}