考虑A中第i次出现的j字符,最终位置一定是在B中第i次出现的j字符的位置,然后即求逆序对数量,cdq/线段树即可

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 1000005
4 #define L (k<<1)
5 #define R (L+1)
6 #define mid (l+r>>1)
7 int n,a[N],c[N],nex[N],f[N<<2];
8 long long ans;
9 char s[N];
10 void update(int k,int l,int r,int x){
11 if (l==r){
12 f[k]++;
13 return;
14 }
15 if (x<=mid)update(L,l,mid,x);
16 else update(R,mid+1,r,x);
17 f[k]=f[L]+f[R];
18 }
19 int query(int k,int l,int r,int x,int y){
20 if ((l>y)||(x>r))return 0;
21 if ((x<=l)&&(r<=y))return f[k];
22 return query(L,l,mid,x,y)+query(R,mid+1,r,x,y);
23 }
24 int main(){
25 scanf("%d%s",&n,s);
26 memset(c,-1,sizeof(c));
27 for(int i=n-1;i>=0;i--){
28 nex[i]=c[s[i]-'A'];
29 c[s[i]-'A']=i;
30 }
31 scanf("%s",s);
32 for(int i=0;i<n;i++){
33 a[c[s[i]-'A']]=i;
34 c[s[i]-'A']=nex[c[s[i]-'A']];
35 }
36 for(int i=0;i<n;i++){
37 ans+=query(1,0,n-1,a[i],n-1);
38 update(1,0,n-1,a[i]);
39 }
40 printf("%lld",ans);
41 }

最新文章

  1. 图解集合5:不正确地使用HashMap引发死循环及元素丢失
  2. 从零开始,做一个NodeJS博客(二):实现首页-加载文章列表和详情
  3. Linux双机信任,适用统一安装
  4. SQL Server 2008 数据库通过镜像同步备份(数据库热备)
  5. BZOJ2463 谁能赢呢?
  6. Sql server之路 (二)登录本地服务器
  7. 【EF Code First】 一对多、多对多的多重关系配置
  8. 九章lintcode作业题
  9. char与varchar、nvarchar区别
  10. ios学习基础篇一
  11. JavaScript中的文档模式和严格模式
  12. Python中使用hashlib进行加密的简单使用
  13. centos通过yum安装mysql
  14. 一个简单的案例带你入门Dubbo分布式框架
  15. EJS-初识
  16. 【hihocoder 1424】 Asa&#39;s Chess Problem(有源汇上下界网络流)
  17. 【分布式搜索引擎】Elasticsearch如何部署以及优化查询性能
  18. tp5阿里云短信发送
  19. oracle 导出表
  20. part1:12-sudo用户管理和Linux密码故障排除

热门文章

  1. dbus客户端使用指南
  2. Network Analyst Tools(Network Analyst 工具)
  3. jenkins容器内安装python3
  4. JavaScript05
  5. ubuntu20.04 使用root用户登录
  6. openmp学习心得(二)----常见的运行时库函数
  7. 零基础学习STM32之入门学习路线
  8. [CSP-S 2021] 廊桥分配 题解
  9. 绝世好题(DP)
  10. Linux 文本三剑客之 awk