bzoj3295: [Cqoi2011]动态逆序对 三维数点
为了便于考虑,把删除反序变为增加
于是就变成关于权值和位置和时间的三维数点
一波cdq一波树状数组教做人
(神TM需要longlong,80了一发)
#include <bits/stdc++.h>
#define mid (l+r>>1)
#define ll long long
using namespace std;
ll n,ret,m,tem;
ll tr[],a[],in[];
bool ok[];
struct qu
{
ll num,pos,id,ans;
} q[],t[];
bool com(qu a,qu b)
{
return a.id<b.id;
}
void add(ll x,ll y){ for(;x<=n;x+=x&-x) tr[x]+=y;}
ll que(ll x){ for(ret=;x;x-=x&-x) ret+=tr[x];return ret;}
void cdq(ll l,ll r)
{
if(l==r) return;
cdq(l,mid);cdq(mid+,r);
for(ll i=l,j=l,k=mid+;i<=r;i++)
if((k>r) || (j<=mid && q[j].pos<q[k].pos)) t[i]=q[j++];
else t[i]=q[k++];
ll ALL=;
for(ll i=l;i<=r;i++)
if((q[i]=t[i]).id>mid)
q[i].ans+=ALL-que(q[i].num);
else
add(q[i].num,),++ALL;
for(ll i=l;i<=r;i++)
if(q[i].id<=mid)
add(q[i].num,-);
for(ll i=r;i>=l;i--)
if(q[i].id>mid)
q[i].ans+=que(q[i].num);
else
add(q[i].num,);
for(ll i=l;i<=r;i++)
if(q[i].id<=mid)
add(q[i].num,-);
}
int main()
{
scanf("%d%d",&n,&m);
for(ll i=;i<=n;i++)
scanf("%d",&tem),a[tem]=i;
for(ll i=;i<=m;i++)
scanf("%d",&in[i]),ok[in[i]]=;
tem=;
for(ll i=;i<=n;i++)
if(!ok[i])
q[++tem].num=i,q[tem].pos=a[q[tem].num],q[tem].id=tem;
for(ll i=m;tem<=n;i--)
q[++tem].num=in[i],q[tem].pos=a[q[tem].num],q[tem].id=tem;
cdq(,n);
sort(q+,q+n+,com);
for(ll i=;i<=n;i++)
q[i].ans+=q[i-].ans;
for(ll i=n;i>n-m;i--)
printf("%lld\n",q[i].ans);
return ;
}
bzoj3295: [Cqoi2011]动态逆序对 三维数点的更多相关文章
- bzoj3295 [Cqoi2011]动态逆序对 cdq+树状数组
[bzoj3295][Cqoi2011]动态逆序对 2014年6月17日4,7954 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数. ...
- [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且 ...
- bzoj千题计划146:bzoj3295: [Cqoi2011]动态逆序对
http://www.lydsy.com/JudgeOnline/problem.php?id=3295 正着删除看做倒着添加 对答案有贡献的数对满足以下3个条件: 出现时间:i<=j 权值大小 ...
- BZOJ3295 [Cqoi2011]动态逆序对 —— CDQ分治
题目链接:https://vjudge.net/problem/HYSBZ-3295 3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 1 ...
- bzoj3295: [Cqoi2011]动态逆序对(cdq分治+树状数组)
3295: [Cqoi2011]动态逆序对 题目:传送门 题解: 刚学完cdq分治,想起来之前有一道是树套树的题目可以用cdq分治来做...尝试一波 还是太弱了...想到了要做两次cdq...然后伏地 ...
- bzoj3295[Cqoi2011]动态逆序对 树套树
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5987 Solved: 2080[Submit][Sta ...
- 2018.07.01 BZOJ3295: [Cqoi2011]动态逆序对(带修主席树)
3295: [Cqoi2011]动态逆序对 **Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j& ...
- BZOJ3295: [Cqoi2011]动态逆序对(树状数组套主席树)
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 7465 Solved: 2662[Submit][Sta ...
- [bzoj3295][Cqoi2011]动态逆序对_主席树
动态逆序对 bzoj-3295 Cqoi-2011 题目大意:题目链接. 注释:略. 想法:直接建立主席树. 由于是一个一个删除,所以我们先拿建立好的root[n]的权值线段树先把总逆序对求出来,接着 ...
随机推荐
- html5--2.7新的布局元素(4)-time
html5--2.7新的布局元素(4)-time 学习要点 了解微格式的概念 掌握time元素的用法 微格式的概念 HTML5中的微格式,是一种利用HTML5中的新标签对网页添加附加信息的方法,附加信 ...
- 在ubuntu环境安装youcompleteme
sudo apt-get update #更新软件源 sudo apt-get clang #安装clang sudo apt-get cmake #安装cmake sudo apt-get inst ...
- packettotal.com - PacketTotal - A Free Online PCAP Analysis Engine
找相似的pcap文件:https://packettotal.com/app/analysis?id=aff96903aae4b73364e027c8a3e85060&name=similar ...
- 洛谷 2577 [ZJOI2005]午餐——序列dp
题目:https://www.luogu.org/problemnew/show/P2577 可以从只有一个窗口的角度思考出一个贪心结论.就是应当按吃饭时间(不算打饭时间)从大到小排序.这样交换相邻两 ...
- cassandra迁移表数据
cassandra的迁移表数据有2种方式,以keyspace名为mydb,table名为user为例子: 方法一:copy命令. 这种方式适合数据量较小的情况. 1.进入cqlsh,输入命令:COPY ...
- Linux 运维面试问题总结
Linux 运维面试问题总结 1.详细描述mysql主从复制的方式?(类似跟DRBD高可用的协议类型) 答: (1)同步复制(C协议:sync):只有在本地和远程磁盘都确定写入已完成时,主节点才会认为 ...
- 用位运算实现四则运算之加减乘除(用位运算求一个数的1/3) via Hackbuteer1
转自:http://blog.csdn.net/hackbuteer1/article/details/7390093 ^: 按位异或:&:按位与: | :按位或 计算机系统中,数值一律用补码 ...
- linux 安装SSH Server + FTP Server(openssh-server + vsftp)
openssh-server (推荐. 一般ssh,ftp 都是单独的,但是这个包含2个) 默认ubuntu 已经安装了, ssh client ,ftp client dpkg -l | grep ...
- 如何将Eclipse中编写的java项目导出?
转自:https://zhidao.baidu.com/question/347808396.html1.导入项目 当下载了包含Eclipse 项目的源代码文件后,我们可以把它导入到当前的Eclips ...
- xgene:WGS,突变与癌,RNA-seq,WES
人类全基因组测序06 SNP(single nucleotide polymorphism):有了10倍以上的覆盖深度以后,来确认SNP信息,就相当可靠了. 一个普通黄种人的基因组,与hg19这个参 ...