using
System;
class
GFG {
static
void
preprocess(
string
s,
string
t,
int
[, ] prefix,
int
n,
int
i)
{
prefix[i, 0] = 0;
if
(s[0] != t[0])
prefix[i, 0] = 1;
for
(
int
j = 1; j < n; j++) {
int
count = 0;
if
(s[j] != t[j % 3])
count++;
prefix[i, j] = prefix[i, j - 1] + count;
}
return
;
}
static
void
minChangesNonPalindrome(
string
str,
int
N,
int
Q,
int
[, ] queries)
{
int
[, ] prefix =
new
int
[6, 100005];
string
[] sequences
= {
"012"
,
"021"
,
"102"
,
"120"
,
"201"
,
"210"
};
for
(
int
i = 0; i < 6; i++) {
preprocess(str, sequences[i], prefix, N, i);
}
for
(
int
i = 0; i < Q; i++) {
int
l = queries[i, 0] + 1, r
= queries[i, 1] + 1;
int
cost = Int32.MaxValue;
for
(
int
j = 0; j < 6; j++) {
int
count = 0;
if
(str[l] != sequences[j][l % 3])
count++;
cost = Math.Min(cost, prefix[j, r]
- prefix[j, l]
+ count);
}
Console.WriteLine(cost);
}
}
static
void
Main()
{
string
S =
"0200011011"
;
int
[, ] queries = { { 0, 4 }, { 1, 6 }, { 2, 8 } };
int
N = S.Length;
int
Q = 3;
minChangesNonPalindrome(S, N, Q, queries);
}
}