using
System;
using
System.Collections.Generic;
class
GFG {
static
List<
int
> MinimumOperations(
int
N,
int
[] A,
int
Q,
int
[][] query)
{
int
[, ] dp =
new
int
[N + 1, 32];
for
(
int
i = 0; i < N; i++) {
for
(
int
j = 0; j < 32; j++) {
if
((A[i] & (1 << j)) != 0) {
dp[i + 1, j] = 1;
}
}
}
for
(
int
i = 2; i <= N; i++) {
for
(
int
j = 0; j < 32; j++) {
dp[i, j] = dp[i, j] + dp[i - 1, j];
}
}
List<
int
> ans =
new
List<
int
>();
for
(
int
i = 0; i < Q; i++) {
int
l = query[i][0], r = query[i][1];
int
y = 0, n = (r - l + 1);
for
(
int
j = 0; j < 32; j++) {
int
x = dp[r + 1, j] - dp[l, j];
y += Math.Min(x, n - x);
}
ans.Add(y);
}
return
ans;
}
public
static
void
Main()
{
int
[] A = { 2, 3, 1, 7 };
int
N = A.Length;
int
[][] query = {
new
int
[] { 0, 2 } };
List<
int
> v = MinimumOperations(N, A, 1, query);
for
(
int
i = 0; i < v.Count; i++) {
Console.Write(v[i] +
" "
);
}
}
}