import
java.util.*;
class
GFG{
static
int
countBit(
int
n){
return
(
int
)((Math.log(n) / Math.log(
2
))+
1
);
}
static
int
countSetBit(
int
n){
int
ans =
0
;
while
(n >
0
){
ans += (n &
1
);
n >>=
1
;
}
return
ans;
}
static
int
maximize(
int
n){
int
bits = countBit(n);
int
setBits = countSetBit(n);
int
ans =
0
;
for
(
int
i =
0
; i < bits; i++){
if
(i < setBits)
ans |=
1
;
if
(i != setBits -
1
)
ans <<=
1
;
}
return
ans;
}
static
int
minimize(
int
n){
int
setBits = countSetBit(n);
int
ans =
0
;
for
(
int
i =
0
; i < setBits; i++){
ans |=
1
;
if
(i != setBits -
1
)
ans <<=
1
;
}
return
ans;
}
static
int
maxDiff(
int
[] arr){
int
caseOne =
0
;
int
SumOfOdd =
0
;
int
SumOfeven =
0
;
for
(
int
i =
0
; i < arr.length; i++){
if
((i %
2
) !=
0
)
SumOfOdd += minimize(arr[i]);
else
SumOfeven += maximize(arr[i]);
}
caseOne = Math.abs(SumOfOdd - SumOfeven);
int
caseTwo =
0
;
SumOfOdd =
0
;
SumOfeven =
0
;
for
(
int
i =
0
; i < arr.length; i++)
{
if
((i %
2
) !=
0
)
SumOfOdd += maximize(arr[i]);
else
SumOfeven += minimize(arr[i]);
}
caseTwo = Math.abs(SumOfOdd - SumOfeven);
return
Math.max(caseOne, caseTwo);
}
public
static
void
main(String[] args)
{
int
[] arr = {
54
,
32
,
11
,
23
};
System.out.println(maxDiff(arr));
}
}