按照顺序依次找到b串每个字母最后的位置,然后求逆序对。

 

#include<cstdio>
#define N 1000010
int n,i,j,k,g[26],nxt[N],bit[N];char a[N],b[N];long long ans;
int main(){
  for(scanf("%d",&n),gets(a),gets(a+1),gets(b+1),i=1;i<=n;g[a[i]]=i++)nxt[i]=g[a[i]-='A'];
  for(i=n;i;i--){
    for(k=j=g[b[i]-='A'],g[b[i]]=nxt[g[b[i]]];k;k-=k&-k)ans+=bit[k];
    for(;j<=n;j+=j&-j)bit[j]++;
  }
  return printf("%lld",ans),0;
}

  

 

相关文章:

  • 2022-02-19
  • 2021-08-07
  • 2022-02-07
  • 2021-09-13
  • 2021-10-28
  • 2022-12-23
  • 2021-06-09
  • 2021-12-09
猜你喜欢
  • 2022-02-11
  • 2021-07-08
  • 2021-07-01
  • 2021-09-03
  • 2021-08-18
  • 2022-12-23
  • 2021-08-10
相关资源
相似解决方案