Problem p02597 (C++) — buggy submission, verdict: Time Limit Exceeded

#include "algorithm"
#include "bitset"
#include "chrono"
#include "cstring"
#include "ctime"
#include "iomanip"
#include "iostream"
#include "map"
#include "math.h"
#include "numeric"
#include "queue"
#include "random"
#include "set"
#include "stack"
#include "string"
#include "vector"

#include "ext/pb_ds/assoc_container.hpp" // Common file
#include "ext/pb_ds/detail/standard_policies.hpp"
#include "ext/pb_ds/tree_policy.hpp" // Including tree_order_statistics_node_update

using namespace std;
using namespace __gnu_pbds;

#define f first
#define lgn 25
#define endl '\\n'
#define sc second
#define pb push_back
#define N (int)2e5 + 5
#define PI acos(-1.0)
#define int long long
#define vi vector<int>
#define mod 1000000007
#define ld long double
#define eb emplace_back
#define mii map<int, int>
#define vpii vector<pii>
#define pii pair<int, int>
#define pq priority_queue
#define BLOCK (int)sqrt(N)
#define test(x) while (x--)
#define all(x) begin(x), end(x)
#define allr(x) x.rbegin(), x.rend()
#define fo(i, a, n) for (int i = a; i < n; i++)
#define rfo(i, n, a) for (int i = n; i >= a; i--)
#define FAST                                                                   \\
  ios::sync_with_stdio(0);                                                     \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define time()                                                                 \\
  cerr << "Time : " << (double)clock() / (double)CLOCKS_PER_SEC << "s\\n"
#define bug(...) __f(#__VA_ARGS__, __VA_ARGS__)

typedef tree<int, null_type, less<int>, rb_tree_tag,
             tree_order_statistics_node_update>
    OS;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

template <typename Arg1> void __f(const char *name, Arg1 &&arg1) {
  cout << name << " : " << arg1 << endl;
}
template <typename Arg1, typename... Args>
void __f(const char *names, Arg1 &&arg1, Args &&...args) {
  const char *comma = strchr(names + 1, ',');
  cout.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}

const int inf = 0x3f3f3f3f;
const int INF = 0x3f3f3f3f3f3f3f3f;

int n, m, k, q;
string s;
vi adj[N];
int vis[N], par[N], a[N];

void go() {
  cin >> n >> s;

  int i = 0, j = n - 1;

  while (i < n and s[i] == 'R')
    i++;
  while (~j and s[j] == 'W')
    j--;

  int ans = 0;

  if (j <= i)
    ans = 0;
  else {
    while (i < j) {
      if (s[i] == 'W' and s[j] == 'R') {
        // bug( i , j );
        // swap( s[i] , s[j] );
        ans += 1;
        i += 1;
        j -= 1;
        continue;
      }
      if (s[i] == 'R' and (s[j] == 'R' or s[j] == 'W'))
        i++;
      if (s[i] == 'W' and s[j] == 'W')
        j--;
    }
  }

  cout << ans << endl;
}

int32_t main() {
  FAST;
  int t = 1;
  // cin>>t;
  test(t) go();
}


Error: TLE

Fixed submission:

#include "algorithm"
#include "bitset"
#include "chrono"
#include "cstring"
#include "ctime"
#include "iomanip"
#include "iostream"
#include "map"
#include "math.h"
#include "numeric"
#include "queue"
#include "random"
#include "set"
#include "stack"
#include "string"
#include "vector"

#include "ext/pb_ds/assoc_container.hpp" // Common file
#include "ext/pb_ds/detail/standard_policies.hpp"
#include "ext/pb_ds/tree_policy.hpp" // Including tree_order_statistics_node_update

using namespace std;
using namespace __gnu_pbds;

#define f first
#define lgn 25
#define endl '\\n'
#define sc second
#define pb push_back
#define N (int)2e5 + 5
#define PI acos(-1.0)
#define int long long
#define vi vector<int>
#define mod 1000000007
#define ld long double
#define eb emplace_back
#define mii map<int, int>
#define vpii vector<pii>
#define pii pair<int, int>
#define pq priority_queue
#define BLOCK (int)sqrt(N)
#define test(x) while (x--)
#define all(x) begin(x), end(x)
#define allr(x) x.rbegin(), x.rend()
#define fo(i, a, n) for (int i = a; i < n; i++)
#define rfo(i, n, a) for (int i = n; i >= a; i--)
#define FAST                                                                   \\
  ios::sync_with_stdio(0);                                                     \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define time()                                                                 \\
  cerr << "Time : " << (double)clock() / (double)CLOCKS_PER_SEC << "s\\n"
#define bug(...) __f(#__VA_ARGS__, __VA_ARGS__)

typedef tree<int, null_type, less<int>, rb_tree_tag,
             tree_order_statistics_node_update>
    OS;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

template <typename Arg1> void __f(const char *name, Arg1 &&arg1) {
  cout << name << " : " << arg1 << endl;
}
template <typename Arg1, typename... Args>
void __f(const char *names, Arg1 &&arg1, Args &&...args) {
  const char *comma = strchr(names + 1, ',');
  cout.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}

const int inf = 0x3f3f3f3f;
const int INF = 0x3f3f3f3f3f3f3f3f;

int n, m, k, q;
string s;
vi adj[N];
int vis[N], par[N], a[N];

void go() {
  cin >> n >> s;

  int i = 0, j = n - 1;

  while (i < n and s[i] == 'R')
    i++;
  while (~j and s[j] == 'W')
    j--;

  int ans = 0;

  if (j <= i)
    ans = 0;
  else {
    while (i < j) {
      if (s[i] == 'W' and s[j] == 'R') {
        // bug( i , j );
        swap(s[i], s[j]);
        ans += 1;
        i += 1;
        j -= 1;
        continue;
      }
      if (s[i] == 'R' and s[j] == 'R')
        i++;
      if (s[i] == 'W' and s[j] == 'W')
        j--;
    }
  }

  cout << ans << endl;
}

int32_t main() {
  FAST;
  int t = 1;
  // cin>>t;
  test(t) go();
}