import
java.util.ArrayList;
import
java.util.Arrays;
import
java.util.HashMap;
import
java.util.Map;
class
GFG{
static
int
findMinimumCost(
int
[] arr,
int
N)
{
int
res =
0
;
int
[] copyArr =
new
int
[N];
boolean
[] visited =
new
boolean
[N];
for
(
int
i =
0
; i < N; ++i) {
copyArr[i] = arr[i];
visited[i] =
false
;
}
Arrays.sort(copyArr);
Map<Integer, Integer> place =
new
HashMap<>();
for
(
int
i =
0
; i < N; ++i) {
place.put(copyArr[i],i);
}
for
(
int
i =
0
; i < N; ++i) {
if
(visited[i] ==
false
) {
if
(place.get(arr[i]) == i) {
visited[i] =
true
;
continue
;
}
int
min_val = arr[i], cost1, cost2;
int
num =
0
;
int
sum =
0
;
int
j = i;
while
(visited[j] ==
false
) {
sum += arr[j];
num++;
if
(arr[j] < min_val) {
min_val = arr[j];
}
visited[j] =
true
;
j = place.get(arr[j]);
}
sum -= min_val;
cost1 = sum + min_val * (num -
1
);
cost2 = copyArr[
0
] * (num +
1
) +
2
* min_val
+ sum;
if
(cost1 < cost2) {
res += cost1;
}
else
{
res += cost2;
}
}
}
return
res;
}
public
static
void
main(String[] args) {
int
[] arr = {
3
,
2
,
1
};
int
N = arr.length;
System.out.println(findMinimumCost(arr, N));
}
}