Language: C

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int N;
    cin >> N;
    string str;
    cin >> str;
    vector<int> R, G, B;
    for(int n=0; n<N; n++) {
        if(str[n]=='R') {
            R.push_back(n);
        } else if(str[n]=='G') {
            G.push_back(n);
        } else {
            B.push_back(n);
        }
    }

    long long int ans=0;
    for(int n=0; n<N; n++) {
        if(str[n]=='R') {
            int gi=lower_bound(G.begin(), G.end(), n)-G.begin();
            int bi=lower_bound(B.begin(), B.end(), n)-B.begin();
            while(gi<G.size() && bi<B.size()) {
                if(G[gi]>B[bi]) {
                    int rid=B[bi]+B[bi]-n;
                    ans += G.size()-gi;
                    if(rid>=str.size()) {
                        ;
                    } else if(str[rid]=='G') {
                        ans--;
                    }
                    bi++;
                } else {
                    int rid=G[gi]+G[gi]-n;
                    ans += B.size()-bi;
                    if(rid>=str.size()) {
                        ;
                    } else if(str[rid]=='B') {
                        ans--;
                    }
                    gi++;
                }
            }
        } else if(str[n]=='G') {
            int ri=lower_bound(R.begin(), R.end(), n)-R.begin();
            int bi=lower_bound(B.begin(), B.end(), n)-B.begin();
            while(ri<R.size() && bi<B.size()) {
                if(R[ri]>B[bi]) {
                    int rid=B[bi]+B[bi]-n;
                    ans += R.size()-ri;
                    if(rid>=str.size()) {
                        ;
                    } else if(str[rid]=='R') {
                        ans--;
                    }
                    bi++;
                } else {
                    int rid=R[ri]+R[ri]-n;
                    ans += B.size()-bi;
                    if(rid>=str.size()) {
                        ;
                    } else if(str[rid]=='B') {
                        ans--;
                    }
                    ri++;
                }
            }
        } else {
            int gi=lower_bound(G.begin(), G.end(), n)-G.begin();
            int ri=lower_bound(R.begin(), R.end(), n)-R.begin();
            while(gi<G.size() && ri<R.size()) {
                if(G[gi]>R[ri]) {
                    int rid=R[ri]+R[ri]-n;
                    ans += G.size()-gi;
                    if(rid>=str.size()) {
                        ;
                    } else if(str[rid]=='G') {
                        ans--;
                    }
                    ri++;
                } else {
                    int rid=G[gi]+G[gi]-n;
                    ans += R.size()-ri;
                    if(rid>=str.size()) {
                        ;
                    } else if(str[rid]=='R') {
                        ans--;
                    }
                    gi++;
                }
            }
        }
        // cout << "No." << n+1 << ". " << str[n] << " " << ans << endl;
    }
    cout << ans << endl;

    
    return 0;
    
}

Compiler output:
main.c:1:10: fatal error: iostream: No such file or directory
    1 | #include <iostream>
      |          ^~~~~~~~~~
compilation terminated.