Problem:
Score : 400 points

Problem Statement

An altar enshrines N stones arranged in a row from left to right. The color of the i-th stone from the left (1 \leq i \leq N) is given to you as a character c_i; R stands for red and W stands for white.

You can do the following two kinds of operations any number of times in any order:

Choose two stones (not necessarily adjacent) and swap them.

Choose one stone and change its color (from red to white and vice versa).

According to a fortune-teller, a white stone placed to the immediate left of a red stone will bring a disaster. At least how many operations are needed to reach a situation without such a white stone?

Constraints

2 \leq N \leq 200000

c_i is R or W.

Input

Input is given from Standard Input in the following format:

N
c_{1}c_{2}...c_{N}

Output

Print an integer representing the minimum number of operations needed.

Sample Input 1

4
WWRR

Sample Output 1

2

For example, the two operations below will achieve the objective.

Swap the 1-st and 3-rd stones from the left, resulting in RWWR.

Change the color of the 4-th stone from the left, resulting in RWWW.

Sample Input 2

2
RR

Sample Output 2

0

It can be the case that no operation is needed.

Sample Input 3

8
WRWWRWRR

Sample Output 3

3

Solution in C++ (GCC 9.2.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pi pair<int,int>
#define ff first
#define ss second
#define boost ios::sync_with_stdio(false);cin.tie(nullptr)
#define endl "\n"
#include "string"

const int N = 2e5 + 5;
string s;
int dp[N][2];

int solve(int id,int cur) {
	if(id >= s.size())
		return 0;
	int &tmp = dp[id][cur];
	if(tmp != -1)
		return tmp;
	if(cur) {
		if(s[id] == 'W') {
			tmp = solve(id + 1, 1) + 1;
			tmp = min(tmp , solve(id + 1, 0));
		}
		else
			tmp = solve(id + 1, 1);
	}
	else{
		tmp = solve(id + 1, cur);
		if(s[id] == 'R')
			tmp++;
	}
	return tmp;
}

int32_t main(){
	boost;
	int n; 
	cin >> n;
	cin >> s;
	int sf[n + 1] = {0};
	for(int i = n - 1; i >= 0; i--) {
		if(s[i] == 'R')
			sf[i]++;
		sf[i] += sf[i + 1];
	}
	int cnt = 0;
	int ans = n;
	for(int i = 0; i < sf[0]; i++) {
		if(s[i] == 'R')
			cnt++;
		int req = i + 1 - cnt;
		ans = min(ans , req + sf[i + 1] - req);
	}
	cout << ans << endl;
}