BZOJ3295:[CQOI2011]动态逆序对——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3295
Description
Input
Output
Sample Input
1
5
3
4
2
5
1
4
2
Sample Output
5
2
2
1
——————————————————————————————
这题不开longlong成功见祖宗……
乍一看我们想不到CDQ,但是显然删除操作不好整,我们将删除变成插入,插入的时间点为t,插入的位置为p,插入的值为n。
则三元组(t,p,n)它的逆序对需要满足t0<t,p0<p,n0>n或者t0<t,p0>p,n0<n。
这不就成三维偏序了吗?解完之后求一遍前缀和即是答案。
#include<cstdio>
#include<queue>
#include<cctype>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=;
inline int read(){
int X=,w=; char ch=;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
struct del{
int t;
int p;
int n;
}q[N],tmp[N];
ll m,n,ans[N],pos[N],tree[N];
inline int lowbit(int t){return t&(-t);}
void add(int x,int y){//将a[x]+y
for(int i=x;i<=n;i+=lowbit(i))tree[i]+=y;
return;
}
ll query(int x){//1-x区间和
ll res=;
for(int i=x;i>;i-=lowbit(i))res+=tree[i];
return res;
}
void cdq(int l,int r){
if(l>=r)return;
int mid=(l+r)>>;
cdq(l,mid);cdq(mid+,r);
for(int i=l,j=l,p=mid+;i<=r;i++){
if(j<=mid&&(p>r||q[j].n>q[p].n))tmp[i]=q[j++];
else tmp[i]=q[p++];
}
for(int i=l;i<=r;i++){
q[i]=tmp[i];
if(q[i].t<=mid)add(q[i].p,);
else ans[q[i].t]+=query(q[i].p);
}
for(int i=l;i<=r;i++)if(q[i].t<=mid)add(q[i].p,-);
for(int i=r;i>=l;i--){
if(q[i].t<=mid)add(q[i].p,);
else ans[q[i].t]+=query(n)-query(q[i].p);
}
for(int i=l;i<=r;i++)if(q[i].t<=mid)add(q[i].p,-);
return;
}
bool vis[N];
int main(){
n=read();
m=read();
for(int i=;i<=n;i++)pos[read()]=i;
for(int i=n;i>=n-m+;i--){
q[i].t=i;
q[i].n=read();
q[i].p=pos[q[i].n];
vis[q[i].n]=;
}
int cnt=n-m;
for(int i=;i<=n;i++){
if(!vis[i]){
q[cnt].t=cnt;
q[cnt].n=i;
q[cnt--].p=pos[i];
}
}
cdq(,n);
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]动态逆序对——题解的更多相关文章
- 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,且 ...
- 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& ...
- bzoj千题计划146:bzoj3295: [Cqoi2011]动态逆序对
http://www.lydsy.com/JudgeOnline/problem.php?id=3295 正着删除看做倒着添加 对答案有贡献的数对满足以下3个条件: 出现时间: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]的权值线段树先把总逆序对求出来,接着 ...
随机推荐
- WPF DataGridTable
由于项目要显示表头合并,而数据源列随时变更,又不想重复的画表格,就实现动态数据(dynamic)绑定和配置数据列模板的方式 编辑DataGridColumnHeader样式实现表头合并:效果如下 实现 ...
- JS Windows.document对象
四中选择器:class ,id , name , 标签 通过选择器获取对象: ...................................ClassName(''); -- class选择 ...
- javaweb(三十七)——获得MySQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- OpenWrt架设nginx php网站
参考 http://www.vinoca.org/2012/05/31/openwrt%E6%9E%B6%E8%AE%BEnginxphp%E7%BD%91%E7%AB%99/ 一.安装相关包 opk ...
- 宿主机ssh免密登录docker容器
一.检查系统内核 二.安装docker 1.yum install docker -y 2.docker version #查看docker版本 3.syste ...
- 【C#】人脸识别 视频数据转图片数据
使用虹软人脸识别的开发过程中遇到了转换的问题 因为不会用C#直接打开摄像头,就只能用第三方dll.一开始用Aforge,后来发现有个问题,关闭摄像头老是陷入等待,所以抛弃了.前一阵子开始用封装了Ope ...
- wireshark解析https协议方法
本文仅介绍通过协商密钥的方式实现https解析的方法 wireshark支持pem
- 第三周pspo过程文档
团队协作: 日期/任务 听课 编写程序 阅读相关书籍 日总计 周一 110 60 ...
- 2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest Problem F. Format
题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229510 时间限制:1s 空间限制:512MB 题目大意: 给定一个字符串,使用%[...] ...
- Floyd算法(原理|代码实现)
http://www.cnblogs.com/twjcnblog/archive/2011/09/07/2170306.html 正如我们所知道的,Floyd算法用于求最短路径.Floyd算法可以说是 ...