bzoj3295: [Cqoi2011]动态逆序对(cdq分治+树状数组)
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分治+树状数组)的更多相关文章
- BZOJ_3295_[Cqoi2011]动态逆序对_CDQ分治+树状数组
BZOJ_3295_[Cqoi2011]动态逆序对_CDQ分治+树状数组 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一 ...
- [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且 ...
- BZOJ3295 [Cqoi2011]动态逆序对 —— CDQ分治
题目链接:https://vjudge.net/problem/HYSBZ-3295 3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 1 ...
- BZOJ3295:[CQOI2011]动态逆序对(CDQ分治)
Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...
- 【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治
[BZOJ3295][Cqoi2011]动态逆序对 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依 ...
- [CQOI2011]动态逆序对 CDQ分治
洛谷上有2道相同的题目(基本是完全相同的,输入输出格式略有不同) ---题面--- ---题面--- CDQ分治 首先由于删除是很不好处理的,所以我们把删除改为插入,然后输出的时候倒着输出即可 首先这 ...
- 洛谷 P3157 [CQOI2011]动态逆序对 | CDQ分治
题目:https://www.luogu.org/problemnew/show/3157 题解: 1.对于静态的逆序对可以用树状数组做 2.我们为了方便可以把删除当成增加,可以化动为静 3.找到三维 ...
- BZOJ 3295: [Cqoi2011]动态逆序对 [CDQ分治]
RT 传送门 首先可以看成倒着插入,求逆序对数 每个数分配时间(注意每个数都要一个时间)$t$,$x$位置,$y$数值 $CDQ(l,r)$时归并排序$x$ 然后用$[l,mid]$的加入更新$[mi ...
- bzoj3295 [Cqoi2011]动态逆序对 cdq+树状数组
[bzoj3295][Cqoi2011]动态逆序对 2014年6月17日4,7954 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数. ...
随机推荐
- 2016.03.04,英语,《Vocabulary Builder》Unit 04
vor: 来自拉丁动词vorare,指to eat,-ivorous指吃某种食物的eater.carn肉,肉欲+vore吃→吃肉的:carnival狂欢节,谢肉节voracious a 狼吞虎咽的(v ...
- checkbox改写
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Spark Streaming概念学习系列之SparkStreaming的高层抽象DStream
不多说,直接上干货! SparkStreaming的高层抽象DStream 为了便于理解,Spark Streaming提出了DStream抽象,代表连续不断的数据流. DStream 是一个持续的R ...
- JVM源码分析之javaagent原理完全解读--转
原文地址:http://www.infoq.com/cn/articles/javaagent-illustrated 概述 本文重点讲述javaagent的具体实现,因为它面向的是我们Java程序员 ...
- [转]SQL Server 批量完整备份
最近我们的服务器需要迁移,服务器上有很多数据库,有很多都不知道干什么的了,但是为了保险起见,我决定都备份下,起初我是右键一个一个备份的,备份三四个还好,可是数据库太多了,而且手动一步一步操作,还得修改 ...
- Linq、延迟加载、直接加载
1.集合常用扩展方法 Where.Max.Min.OrderBy. Select.//投影后的IEnumerable对象可以通过,AsQueryable转换数据类型 First.FirstOrDefa ...
- 开发辅助 | 前端开发工程师对 UI设计、交互设计的认知
1.UI 用户界面 UI:User Interfase 用户界面 UID:User Interfase Designer 用户界面设计师,多指移动 app 的界面设计: 2.一个合格的 UI 设计师, ...
- 达夫设备之js
最近阅读<高性能JavaScript>时,在书中的“达夫设备“ . 对此,有些感悟,同时有些疑问,希望看到的朋友,能帮忙解释下,在此先提前感谢了. 1. 先说自己的理解吧: ”达夫设备“的 ...
- java 遍历list 模糊查询用
java 遍历list 模糊查询用 /** * 筛选list * @param list 要筛选的list * @param key 筛选的key * @param <T> * @retu ...
- HTTP+XML接口客户端 结合策略模式实现总结
在项目中,我们经常会使用到http+xml的接口,而且不仅仅的是一个,可能会有多个http的接口需要实时的交互.但是http接口的发送消息的公共部分是一样的,只有每个接口的报文解析和返回报文是不同的, ...