Submission #1248086

#TimeUsernameProblemLanguageResultExecution timeMemory
1248086damoonMonochrome Points (JOI20_monochrome)C++20
0 / 100
1 ms2376 KiB
#include <bits/stdc++.h>
using namespace std;

//#pragma GCC optimize("O3,unroll-loops") //main
//#pragma GCC target("avx2") //cf...
//#pragma GCC target("sse4") //Quera

#define ll long long
typedef pair<int,int> pii;
typedef pair<int,pii> pip;
typedef pair<pii,int> ppi;
typedef pair<pii,pii> ppp;
#define f first
#define s second

#define lc 2*id
#define rc 2*id+1
#define mid (l+r)/2
#define all(x) x.begin(),x.end()

#define pb push_back
#define pp pop_back
#define unicorn(x) x.resize(unique(x.begin(),x.end())-x.begin())
#define dig(x,d) ((x&(1ll<<d)) > 0)

string pr(int* vv,int l,int r){for(int i=l;i<r;i++)cout<<vv[i]<<" ";return "";}
string pr( ll* vv,int l,int r){for(int i=l;i<r;i++)cout<<vv[i]<<" ";return "";}
string pr(vector<int> vv){for(auto i:vv)cout<<i<<" ";return "";}
string pr( vector<ll> vv){for(auto i:vv)cout<<i<<" ";return "";}
string pr(pii* vv,int l,int r){for(int i=l;i<r;i++)cout<<"( "<<vv[i].f<<","<<vv[i].s<<" )    ";return "";}
string pr(vector<pii> vv){for(auto i:vv)cout<<"( "<<i.f<<","<<i.s<<" )    ";return "";}
string pr(bool* vv,int l,int r){for(int i=l;i<r;i++)cout<<vv[i];return"";}
ostream& operator <<(ostream& out, pii x){out << "("<<x.f<<", "<<x.s<<") ";return out;}

random_device device;
default_random_engine rng(device());
#define randt(a,b) uniform_int_distribution<int64_t>(a,b)(rng)

const int L=5e5+10, mod=1e9+7;
const int inf=1e9+10;
int n;
bool c[L];
vector<int> av[2];
int a[L],cnt[2];

struct fen{
    int sum[L];
    fen(){
        fill(sum+1,sum+L,0);
    }
    void update(int ind,int x){
        for(int i=ind ; i<L ; i+=i&-i){
            sum[i] += x;
        }
    }
    int get(int ind){
        int ans = 0;
        for(int i=ind ; i>0 ; i-=i&-i){
            ans += sum[i];
        }
        return ans;
    }
}F;

int main(){
    //ofstream cout ("out.out");
    //ifstream cin ("in.in");

    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin>>n;
    for(int i=1;i<=2*n;i++){
        char inp;
        cin>>inp;
        c[i] = (inp == 'B');
    }
    for(int i=n+1;i<=2*n;i++){
        av[c[i]].pb(i-n);
    }

    for(int i=1;i<=n;i++){
        a[i] = av[!c[i]][cnt[c[i]]];
        cnt[c[i]]++;
    }

    int ans = 0;
    for(int i=1;i<=n;i++){
        ans += F.get(a[i]);
        F.update(a[i],1);
    }
    cout<<ans<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...