import
java.util.*;
import
java.lang.Math;
public
class
GFG {
public
static
int
MAX=
100001
;
public
static
int
SQRSIZE=
400
;
public
static
int
query_blk_sz;
public
static
int
[] frequency =
new
int
[MAX];
public
static
int
[] blocks =
new
int
[SQRSIZE];
public
static
int
blk_sz;
static
Comparator<
int
[]> arrayComparator =
new
Comparator<
int
[]>() {
@Override
public
int
compare(
int
[] x,
int
[] y) {
if
(x[
0
] / query_blk_sz != y[
0
] / query_blk_sz)
return
Integer.compare(x[
0
] / query_blk_sz, y[
0
] / query_blk_sz);
return
Integer.compare(x[
1
],y[
1
]);
}
};
public
static
int
getblocknumber(
int
ind)
{
return
(ind) / blk_sz;
}
public
static
int
getans(
int
A,
int
B)
{
int
ans =
0
;
int
left_blk, right_blk;
left_blk = getblocknumber(A);
right_blk = getblocknumber(B);
if
(left_blk == right_blk) {
for
(
int
i = A; i <= B; i++)
ans += frequency[i];
}
else
{
for
(
int
i = A; i < (left_blk +
1
) * blk_sz; i++)
ans += frequency[i];
for
(
int
i = left_blk +
1
;
i < right_blk; i++)
ans += blocks[i];
for
(
int
i = right_blk * blk_sz;
i <= B; i++)
ans += frequency[i];
}
return
ans;
}
public
static
void
add(
int
ind,
int
a[])
{
frequency[a[ind]]++;
int
block_num = getblocknumber(a[ind]);
blocks[block_num]++;
}
public
static
void
remove(
int
ind,
int
a[])
{
frequency[a[ind]]--;
int
block_num = getblocknumber(a[ind]);
blocks[block_num]--;
}
public
static
void
queryResults(
int
a[],
int
n,
int
[][] q,
int
m,
int
A,
int
B)
{
query_blk_sz = (
int
)Math.sqrt(m);
Arrays.sort(q,arrayComparator);
int
currL =
0
, currR =
0
;
for
(
int
i =
0
; i < m; i++) {
int
L = q[i][
0
], R = q[i][
1
];
while
(currR <= R) {
add(currR, a);
currR++;
}
while
(currL > L) {
add(currL -
1
, a);
currL--;
}
while
(currR > R +
1
)
{
remove(currR -
1
, a);
currR--;
}
while
(currL < L) {
remove(currL, a);
currL++;
}
System.out.println(getans(A, B));
}
}
public
static
void
main(String[] args) {
int
arr[] = {
2
,
0
,
3
,
1
,
4
,
2
,
5
,
11
};
int
N = arr.length;
int
A =
1
, B =
5
;
blk_sz = (
int
) Math.sqrt(N);
int
[][] Q = { {
0
,
2
}, {
0
,
3
}, {
5
,
7
} };
int
M = Q.length;
queryResults(arr, N, Q, M, A, B);
}
}