小红的元素交换
题号:NC268749
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小红拿到了一个排列,其中初始所有元素都是白色,但有一些元素被染成了红色。
小红每次操作可以选择交换任意一个红色元素和一个白色元素的位置。她希望操作尽可能少的次数使得数组变成升序,你能帮帮她吗?
排列是指:一个长度为n的数组,其中 1 到n每个元素恰好出现了一次。

输入描述:

第一行输入一个正整数n,代表排列的长度。
第二行输入n个正整数a_i,代表排列的元素。
第三行输入一个长度为n的字符串,代表数组元素的染色情况。第i个字符为'R'代表第i个元素被染成红色,为'W'代表初始的白色。
1\leq n \leq 10^5
1\leq a_i \leq n

输出描述:

如果无法完成排序,请输出 -1。
否则输出一个整数,代表操作的最小次数。

示例1

输入

复制
4
1 3 2 4
RWWR

输出

复制
3

说明

第一次操作,交换 2 和 4。数组变成[1,3,4,2]
第二次操作,交换 3 和 4。数组变成[1,4,3,2]
第三次操作,交换 2 和 4。数组变成[1,2,3,4]