容易看出ans[i]=ans[i-1]-q[i],q[i]为删去第i个数减少的逆序对。

先用树状数组算出最开始的逆序对,预处理出每个数前边比它大的和后边比它小的,就求出了q[i]的初始值。

设b[i]是第i个删除的数,pos[i]为i在数列里的位置。

对q[i]产生影响的是   1. j<i,pos[b[j]]<pos[b[i]],b[j]>b[i].  2.j<i,pos[b[j]]>pos[b[i]],b[j]<b[i].

因为是三维的,所以我们套一层cdq。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
#define N 100005
using namespace std;
int n,m;
int a[N],b[N],d[N];
int c[N];
int ans[N];int p[N];
int qur(int x)
{
int tp=;
for(int i=x;i;i-=(i&-i))tp+=c[i];
return tp;
}
void add(int x,int z)
{
for(int i=x;i<=n;i+=(i&-i))c[i]+=z;
return ;
}
int tmp[N];int q[N];
bool cmp(int x,int y)
{
return p[x]<p[y];
}
void solve(int l,int r)
{
if(l==r)return ;
int mid=(l+r)>>;
int cnt=;
for(int i=l;i<=r;i++)tmp[++cnt]=b[i];
sort(tmp+,tmp+cnt+,cmp);
for(int i=;i<=cnt;i++)
{
if(d[tmp[i]]<=mid)add(tmp[i],);
else q[tmp[i]]-=qur(n)-qur(tmp[i]);
}
for(int i=;i<=cnt;i++)if(d[tmp[i]]<=mid)add(tmp[i],-);
for(int i=cnt;i>=;i--)
{
if(d[tmp[i]]<=mid)add(tmp[i],);
else q[tmp[i]]-=qur(tmp[i]);
}
for(int i=;i<=cnt;i++)if(d[tmp[i]]<=mid)add(tmp[i],-);
solve(l,mid);solve(mid+,r);
return ;
}
signed main()
{
scanf("%lld%lld",&n,&m);
for(int i=;i<=n;i++)scanf("%lld",&a[i]),p[a[i]]=i;
for(int i=;i<=m;i++)scanf("%lld",&b[i]),d[b[i]]=i;
for(int i=;i<=n;i++)
{
int tp=qur(n)-qur(a[i]);
ans[]+=tp;
q[a[i]]+=tp;
add(a[i],);
}
memset(c,,sizeof(c));
for(int i=n;i>=;i--)
{
int tp=qur(a[i]);
q[a[i]]+=tp;
add(a[i],);
}
memset(c,,sizeof(c));
solve(,m);
for(int i=;i<m;i++)ans[i]=ans[i-]-q[b[i]];
for(int i=;i<m;i++)printf("%lld\n",ans[i]);
return ;
}

bzoj 3295 动态逆序对 CDQ分支的更多相关文章

  1. BZOJ 3295 动态逆序对 | CDQ分治

    BZOJ 3295 动态逆序对 这道题和三维偏序很类似.某个元素加入后产生的贡献 = time更小.pos更小.val更大的元素个数 + time更小.pos更大.val更小的元素个数. 分别用类似C ...

  2. bzoj 3295 动态逆序对 (三维偏序,CDQ+树状数组)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3295 思路: 可以将这道题看成倒着插入,这样就可以转化成求逆序对数,用CDQ分治降维,正反用 ...

  3. BZOJ 3295 动态逆序对

    调了好久.... 转化成三维偏序,cdq处理. 好像比较快? #include<iostream> #include<cstdio> #include<cstring&g ...

  4. BZOJ - 3295 动态逆序对 (树状数组套treap)

    题目链接 思路和bzoj2141差不多,不过这道题的数据更强一些,线段树套treapT了,树状数组套treap卡过~~ #include<bits/stdc++.h> using name ...

  5. P3157 动态逆序对 CDQ分治

    动态逆序对 CDQ分治 传送门:https://www.luogu.org/problemnew/show/P3157 题意: 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对 ...

  6. [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且 ...

  7. BZOJ3295 [Cqoi2011]动态逆序对 —— CDQ分治

    题目链接:https://vjudge.net/problem/HYSBZ-3295 3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 1 ...

  8. bzoj3295: [Cqoi2011]动态逆序对(cdq分治+树状数组)

    3295: [Cqoi2011]动态逆序对 题目:传送门 题解: 刚学完cdq分治,想起来之前有一道是树套树的题目可以用cdq分治来做...尝试一波 还是太弱了...想到了要做两次cdq...然后伏地 ...

  9. 【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治

    [BZOJ3295][Cqoi2011]动态逆序对 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依 ...

随机推荐

  1. ToolWindow工具类

    package com.dute.dutenews.utils; import android.app.Activity; import android.content.Context; import ...

  2. Reveal1.5破解,iOS_UI调试利器Reveal最新版本破解方法

    Reveal1.0.7破解 1.官网下载最新版Reveal,拖动应用程序中,运行一次2.下载16进制编辑器"0xED" for mac(http://dl.vmall.com/c0 ...

  3. iOS开发之功能模块--模糊效果

    1.先介绍一个好用的实现模糊效果的框架:https://github.com/YouXianMing/UIImageBlur 2.iOS8 中 UIVisualEffectView 模糊效果的使用 , ...

  4. MS SQL巡检系列——检查数据库上一次DBCC CHECKDB的时间

    DBCC CHECKDB检查指定数据库中的所有对象的逻辑和物理完整性,具体请参考MSDN文档.我们必须定期对数据库做完整性检查(DBCC CHECKDB),以便能及时发现一些数据库损坏(Corrupt ...

  5. sql tuning advisor使用

    DB tuning advisor是创建优化任务,对某些sql数据库进行分析,并尽量给出优化建议的一个强大的数据库工具. 自己平时几乎没用过这玩意,所以来测一测用法,其实对于一些sql一筹莫展的时候跑 ...

  6. 从零自学Hadoop(06):集群搭建

    阅读目录 序 集群搭建 监控 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 上一 ...

  7. memcache+magent的高可用

    memcache+magent的高可用 一.安装步骤: 1.编译安装libevent: wget http://monkey.org/~provos/libevent-1.4.9-stable.tar ...

  8. Redmine 插件安装

    将对应的插件都复制进redmine的plugins 安装对应所需要的GEMS bundle install --without development test rmagick 执行插件合并 bund ...

  9. MalformedByteSequenceException: Invalid byte 1 of 1-byte

    修改了线上程序的xml配置文件,重启后报如下错误: MalformedByteSequenceException: Invalid byte 1 of 1-byte 百度了下大体的意思是说文件的编码错 ...

  10. Label控件如何根据字符串自定义大小

    一.. this.label_Msg.AutoSize = false;  //设置label空件不能自动大小 二.. 用代码控制label控件的大小 1.根据字符串.label的宽度 计算字符串的面 ...