#include <bits/stdc++.h>
using
namespace
std;
void
buildTree(vector<
int
>& tree,
int
* arr,
int
index,
int
s,
int
e,
int
A,
int
B)
{
if
(s == e) {
if
(arr[s] >= A && arr[s] <= B)
tree[index] = 1;
else
tree[index] = 0;
return
;
}
int
mid = (s + e) / 2;
buildTree(tree, arr, 2 * index, s, mid, A, B);
buildTree(tree, arr, 2 * index + 1, mid + 1, e, A, B);
tree[index] = tree[2 * index] + tree[2 * index + 1];
}
int
query(vector<
int
> tree,
int
index,
int
s,
int
e,
int
l,
int
r)
{
if
(r < s || l > e)
return
0;
if
(s >= l && e <= r) {
return
tree[index];
}
int
mid = (s + e) / 2;
return
(query(tree, 2 * index, s, mid, l, r)
+ query(tree, 2 * index + 1, mid + 1, e, l, r));
}
int
main()
{
int
arr[] = { 7, 3, 9, 13, 5, 4 };
int
n =
sizeof
(arr) /
sizeof
(arr[0]);
vector<
int
> tree(4 * n + 1);
int
L = 1, R = 5, A = 4, B = 7;
buildTree(tree, arr, 1, 0, n - 1, A, B);
cout << query(tree, 1, 0, n - 1, L, R)
<< endl;
return
0;
}