3295: [Cqoi2011]动态逆序对

题目:传送门


题解:

   刚学完cdq分治,想起来之前有一道是树套树的题目可以用cdq分治来做...尝试一波

   还是太弱了...想到了要做两次cdq...然后伏地膜大佬

   其实需要维护的地方还是很容易想到的:

   第一维维护位置w,第二维维护数值s,第三维维护修改的时间t。

   那么对于t我们可以倒序插入,然后我们就可以把它看作t从小到大的插入结点(即使没有删除的点为了方便也要更新一下t)。

   再去观察就会发现,当我们插入一个节点t0时,我们需要求的就是在t0左边的比它大的数和在右边比它小的数:

   t<t0 w<w0 s>s0

   t<t0 w>w0 s<s0

   再转化一下符号:

   t<t0 w<w0 s<(n-s0+1)

   t<t0 w<(n-w0+1) s<s0

   这时候再看,不就是陌上花开吗!!!

   ps:大佬实在是太强了,记得开longlong(虽然不是很懂为什么,但是就是错了...)


代码:

 #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long LL;
struct node
{
int w,s,t;//位置,数值,操作时间
LL ans;//当前时间的答案
}a[],ba[];int n,m,b[];LL ans[];
bool cmp(node n1,node n2){return n1.t<n2.t;}
LL s[];
int lowbit(int x){return x&-x;}
void add(int x,int k){while(x<=n){s[x]+=k;x+=lowbit(x);}}
int getsum(int x){LL ans=;while(x){ans+=s[x];x-=lowbit(x);}return ans;}
void cdq(int l,int r)
{
if(l==r)return ;
int mid=(l+r)>>;
cdq(l,mid);cdq(mid+,r);
int i=l,j=mid+,p=l;
while(i<=mid && j<=r)
{
if(a[i].w<a[j].w)
{
add(a[i].s,);
ba[p++]=a[i++];
}
else
{
a[j].ans+=getsum(a[j].s);
ba[p++]=a[j++];
}
}
while(i<=mid)add(a[i].s,),ba[p++]=a[i++];
while(j<=r)a[j].ans+=getsum(a[j].s),ba[p++]=a[j++]; for(int i=l;i<=mid;i++)add(a[i].s,-); for(int i=l;i<=r;i++)a[i]=ba[i];
}
int main()
{
scanf("%d%d",&n,&m);int x,cc=n;
for(int i=;i<=n;i++)a[i].w=i,scanf("%d",&a[i].s);
for(int i=;i<=m;i++)scanf("%d",&x),b[x]=i;int s=m;
for(int i=;i<=n;i++)if(!b[i])b[i]=++s;
for(int i=;i<=n;i++)a[i].t=n-b[a[i].s]+;
sort(a+,a+n+,cmp);
for(int i=;i<=n;i++)a[i].s=n-a[i].s+;
cdq(,n);
sort(a+,a+n+,cmp);
for(int i=;i<=n;i++)
{
a[i].s=n-a[i].s+;
a[i].w=n-a[i].w+;
}
cdq(,n);
for(int i=;i<=n;i++)ans[a[i].t]=a[i].ans;
for(int i=;i<=n;i++)ans[i]+=ans[i-];
for(int i=n;i>=n-m+;i--)printf("%lld\n",ans[i]);
return ;
}

bzoj3295: [Cqoi2011]动态逆序对(cdq分治+树状数组)的更多相关文章

  1. BZOJ_3295_[Cqoi2011]动态逆序对_CDQ分治+树状数组

    BZOJ_3295_[Cqoi2011]动态逆序对_CDQ分治+树状数组 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一 ...

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

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

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

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

  4. BZOJ3295:[CQOI2011]动态逆序对(CDQ分治)

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

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

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

  6. [CQOI2011]动态逆序对 CDQ分治

    洛谷上有2道相同的题目(基本是完全相同的,输入输出格式略有不同) ---题面--- ---题面--- CDQ分治 首先由于删除是很不好处理的,所以我们把删除改为插入,然后输出的时候倒着输出即可 首先这 ...

  7. 洛谷 P3157 [CQOI2011]动态逆序对 | CDQ分治

    题目:https://www.luogu.org/problemnew/show/3157 题解: 1.对于静态的逆序对可以用树状数组做 2.我们为了方便可以把删除当成增加,可以化动为静 3.找到三维 ...

  8. BZOJ 3295: [Cqoi2011]动态逆序对 [CDQ分治]

    RT 传送门 首先可以看成倒着插入,求逆序对数 每个数分配时间(注意每个数都要一个时间)$t$,$x$位置,$y$数值 $CDQ(l,r)$时归并排序$x$ 然后用$[l,mid]$的加入更新$[mi ...

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

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

随机推荐

  1. Mina airQQ聊天 client篇(三)

    开发工具 (FlashBuilder4.7) 程序类型(Adobe Air) Flex Air做的桌面程序,效果还挺好看的.最主要是Socket这一块,它也是异步的,而且在Flex中的事件机制比較强大 ...

  2. android中进程的优先级

    android中进程的优先级

  3. asf

    这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能  够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没有方向  ,所以把我的经历写出来与大家共勉, ...

  4. Hadoop 三剑客之 —— 分布式文件存储系统 HDFS

    一.介绍 二.HDFS 设计原理     2.1 HDFS 架构     2.2 文件系统命名空间     2.3 数据复制     2.4 数据复制的实现原理     2.5 副本的选择     2 ...

  5. js最简单的-点击小图放大

    js最简单的-点击小图放大 标签(空格分隔): js <html> <body> <img class="imgview" src="{$v ...

  6. Axure设计软件下载安装及注册

    如图:本地计算机安装了两个版本的Axure,但8版的有问题,点击保存软件就退出了:7版本要想使用的注册授权 https://blog.csdn.net/botree_chan/article/deta ...

  7. form&method【POST~GET】

    <form.../>中method属性指定了该表单是以哪种方式提交请求,有两种方式:GET请求方式和POST请求方式,默认是GET请求方式.两种方式的区别:get方式的请求是在浏览器地址栏 ...

  8. Python 之 PyCharm使用

    PyCharm  的官方网站地址是:https://www.jetbrains.com/pycharm/download/ 教育版:https://www.jetbrains.com/pycharm- ...

  9. SQL的几个路径

    这个是主数据库文件存放的地方 C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER2014\MSSQL\DATA

  10. python爬虫:爬取读者某一期内容

    学会了怎么使用os模块 #!/usr/bin/python# -*- encoding:utf-8 -*- import requestsimport osfrom bs4 import Beauti ...