Portal --> bzoj3295

Solution

  虽然说这个可能原本是一道愉快的树套树但是

​  没有强制在线并且是三维限制那就大力cdq分治啊!

  

​  看到“按照某个顺序依次删除”这样的字眼,比较容易联想到一个套路:反过来看,变成按照某个顺序依次插入

​  那么对于一个询问,删掉它之前(转化完了之后就是插入它之后)的所会影响到的逆序对数可以分为两种:一种是在它前面但是比它大的,一种是在它后面但是比它小的

​  对于每一个转化后的插入我们都计算出这样两个值的和,然后答案显然就是累加一下就好了

​  所以我们按照位置递增做一次cdq,然后再按照位置递减做一次cdq,就可以将上面两种情况分别算出来了

  总的来说就是:时间维用排序,位置维用cdq,数值维用树状数组,然后就很愉快滴做完了

​  注意因为一开始的时候我们将顺序反了过来所以最后要反着输出

  

  代码大概长这个样子:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=100010;
struct Op{
int pos,val,t;
friend bool operator < (Op x,Op y)
{return x.t<y.t;}
}a[N],rec[N];
int lis[N],pos[N];
ll c[N],ans[N];
int n,m,tot,mx; void insert(int x,int delta){
for (;x;x-=x&-x) c[x]+=delta;
}
int query(int x){
int ret=0;
for (;x<=mx;x+=x&-x) ret+=c[x];
return ret;
}
void solve(int l,int r){
if (l==r) return;
int mid=l+r>>1;
solve(l,mid);
solve(mid+1,r);
int tmp,tp=l,tot=l-1;
for (int i=mid+1;i<=r;++i){
while (tp<=mid&&a[tp].pos<a[i].pos)
rec[++tot]=a[tp],insert(a[tp++].val,1);
rec[++tot]=a[i];
ans[a[i].t]+=query(a[i].val+1);
}
for (int i=l;i<tp;++i) insert(a[i].val,-1);
for (int i=tp;i<=mid;++i) rec[++tot]=a[i];
for (int i=l;i<=r;++i) a[i]=rec[i];
} int main(){/*{{{*/
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif
int x;
scanf("%d%d",&n,&m);
mx=0;
for (int i=1;i<=n;++i)
scanf("%d",&a[i].val),a[i].pos=i,pos[a[i].val]=i,mx=max(mx,a[i].val);
for (int i=1;i<=m;++i){
scanf("%d",&x);
a[pos[x]].t=m-i+1;
}
sort(a+1,a+1+n);
solve(1,n);
for (int i=1;i<=n;++i)
a[i].pos*=-1,a[i].val=n-a[i].val+1;
sort(a+1,a+1+n);
solve(1,n);
for (int i=1;i<=m;++i) ans[i]+=ans[i-1];
for (int i=1;i<=m;++i)
printf("%lld\n",ans[m-i+1]);
}/*}}}*/

【bzoj3295】动态逆序对的更多相关文章

  1. BZOJ3295 动态逆序对(树状数组套线段树)

    [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 6058  Solved: 2117[Submit][Status][D ...

  2. bzoj3295 动态逆序对

    Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...

  3. BZOJ3295动态逆序对

    一道比较傻的CDQ分治 CDQ: 主要用于解决三位偏序的问题 #include<cstdio> #include<cctype> #include<algorithm&g ...

  4. 【BZOJ3295】动态逆序对(线段树,树状数组)

    [BZOJ3295]动态逆序对(线段树,树状数组) 题面 Description 对于序列A,它的逆序对数定义为满足iAj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的 ...

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

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

  6. bzoj3295 [Cqoi2011]动态逆序对 cdq+树状数组

    [bzoj3295][Cqoi2011]动态逆序对 2014年6月17日4,7954 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数. ...

  7. bzoj3295 洛谷P3157、1393 动态逆序对——树套树

    题目:bzoj3295 https://www.lydsy.com/JudgeOnline/problem.php?id=3295 洛谷 P3157(同一道题) https://www.luogu.o ...

  8. 【题解】动态逆序对 [CQOI2011] [P3157] [BZOJ3295] [P1393]

    [题解]动态逆序对 [CQOI2011] [P3157] [BZOJ3295] [P1393] 水一水QAQ 题目链接: \([P3157]\) \([BZOJ3295]\) [题目描述] 对于一个序 ...

  9. [bzoj3295][Cqoi2011]动态逆序对_主席树

    动态逆序对 bzoj-3295 Cqoi-2011 题目大意:题目链接. 注释:略. 想法:直接建立主席树. 由于是一个一个删除,所以我们先拿建立好的root[n]的权值线段树先把总逆序对求出来,接着 ...

  10. bzoj3295[Cqoi2011]动态逆序对 树套树

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 5987  Solved: 2080[Submit][Sta ...

随机推荐

  1. hive的内置函数和自定义函数

    一.内置函数 1.一般常用函数 .取整函数 round() 当传入第二个参数则为精度 bround() 银行家舍入法:为5时,前一位为偶则舍,奇则进. .向下取整 floor() .向上取整 ceil ...

  2. LVM缩小根分区

    逻辑卷不是根分区都可以在线扩容和缩小 根分区是可以在线扩容,但不可以在线缩小 Linux系统进入救援模式 依次选择: 欢迎界面 ---------- Rescue installed system C ...

  3. sqli-labs学习笔记 DAY2

    DAY2 sqli-labs lesson 2 手工注入 URL:http://localhost/sqli-labs-master/Less-2/ Parameter:id 注入点检测:id=2;– ...

  4. WeakHashMap介绍

    WeakHashMap简介 WeakHashMap 继承于AbstractMap,实现了Map接口.    和HashMap一样,WeakHashMap 也是一个散列表,它存储的内容也是键值对(key ...

  5. app开发相关

    app播放UIWebview 没有声音解决: 设置 allowsInlineMediaPlayback  = YES; mediaPlaybackRequiresUserAction = NO

  6. python 将base64字符串还原为图片

    今天弄验证码的时候发现,验证码的图片的src竟然是下面的这么一个一串字符串,吓到,好像不可以http请求的,第一次见,就好尴尬,去网上搜索了一下,说是: 这是Data URI scheme. data ...

  7. <问吧>调查问卷心得体会

    <问吧>调查问卷心得与体会 在这之前,我们已经组成了一个六个人的小团队---“走廊奔跑队”,我们这次做的这个项目的名称是:问吧.在项目实施之前,我们必做的一步就是需求分析,目的就是充分了解 ...

  8. MAVEN项目标准目录结构 ;

    http://blog.csdn.net/lengyue_wy/article/details/6718637 版权声明:本文为博主原创文章,未经博主允许不得转载.    1.标准目录结构: src ...

  9. 【Nginx】均衡负载权重模式实现session数据同步

    思路:把session存放到一个公共redis服务器上 每次浏览器请求服务端都会带上cookie,因为使用的是权重负载均衡方案,因此nginx反向代理服务器会把请求发放到不同的服务端,服务端用cook ...

  10. ubuntu下安装 openssl&&编译运行测试代码

    检查是否已安装 openssl: sudo apt-get install openssl 如果已安装执行以下操作:sudo apt-get install libssl-devsudo apt-ge ...