【BZOJ3295】【CQOI2011】动态逆序对
cdq分治经典例题,然而智商掉线傻逼错误坑了两天
原题:
对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。
N<=100000 M<=50000
此题修改和询问绑定完全离线,可以直接倒序变成插入,然后就是三维数星星辣(ง •̀∀•́)ง
x为下标,y为值,z为时间轴,x排序,z_cdq分治,y树状数组
不用搞两次cdq分治,每次按x递增查找比y大的,然后按x递减查找比y小的
注意当x递增的时候查找的是比y大的,因为虽然x是递增,但是修改上去的都是比当前x小的
然后我先计算贡献再把小于mid的放左边大于mid的放右边然后进入下一层的做法是没有问题的
问题在于我傻逼题中删除的是值我删的是下标
注意longlong
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
#define ll long long
int read(){int z=,mark=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mark=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mark;
}
struct cdd{int x,y,z;}a[],q[];
int n,m,b[]; int N;
bool usd[]; int tt=;
ll e[]; int lbt[];
ll ans[];
int re[];
void gtlbt(){for(int i=;i<=n;++i) lbt[i]=i&-i;}
void mdf(int x,int y){while(x<=n) e[x]+=y,x+=lbt[x];}
ll qr(int x){ll bwl=; while(x) bwl+=e[x],x-=lbt[x]; return bwl;}
void cdq(int l,int r){
if(l==r) return ;
int md=(l+r)>>;
for(int i=l;i<=r;++i){
if(a[i].z>md) mdf(a[i].y,);
else ans[a[i].z]+=qr(n)-qr(a[i].y);
}
for(int i=l;i<=r;++i)if(a[i].z>md) mdf(a[i].y,-);
for(int i=r;i>=l;--i){
if(a[i].z>md) mdf(a[i].y,);
else ans[a[i].z]+=qr(a[i].y);
}
for(int i=l;i<=r;++i)if(a[i].z>md) mdf(a[i].y,-);
int t1=l,t2=md+;
for(int i=l;i<=r;++i) q[(a[i].z<=md?t1:t2)++]=a[i];
for(int i=l;i<=r;++i) a[i]=q[i];
cdq(l,md),cdq(md+,r);
}
bool cmp(cdd x,cdd y){return x.x<y.x;}
int main(){//freopen("ddd.in","r",stdin);
memset(usd,,sizeof(usd));
cin>>n>>m; N=n-m;
gtlbt();
for(int i=;i<=n;++i) b[i]=read(),re[b[i]]=i;
for(int i=;i<=m;++i) a[++tt].y=read(),a[i].x=re[a[i].y],a[i].z=i,usd[a[i].x]=true;
for(int i=;i<=n;++i)if(!usd[i]) a[++tt].x=i,a[tt].y=b[i],a[tt].z=tt;
sort(a+,a+n+,cmp);
cdq(,n);
for(int i=n;i>;--i) ans[i-]+=ans[i];
for(int i=;i<=m;++i) printf("%I64d\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]动态逆序对 树套树
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]动态逆序对 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]动态逆序对(树状数组套主席树)
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 7465 Solved: 2662[Submit][Sta ...
- 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]动态逆序对_主席树
动态逆序对 bzoj-3295 Cqoi-2011 题目大意:题目链接. 注释:略. 想法:直接建立主席树. 由于是一个一个删除,所以我们先拿建立好的root[n]的权值线段树先把总逆序对求出来,接着 ...
- bzoj3295: [Cqoi2011]动态逆序对(树套树)
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
随机推荐
- SQLServer创建用户、数据库、表、约束、存储过程、视图
--创建登录账户和数据库用户 ' exec sp_grantdbaccess 'sysAdmin','aa' --给数据库用户赋权限 grant select,update,insert,delete ...
- win10 WiFi 密码查询 命令
如果你笔记本有WiFi,正好你系统又是Win10 那么... netsh wlan show profile * key=clear
- codeforces 700a//As Fast As Possible// Codeforces Round #364(Div. 1)
题意:n个人要运动ll长,有个bus带其中几个人,问最短时间 最后所有人在同一时间到终点是用时最少的.由于搭bus相当于加速,每个人的加速时间应该一样.先计算bus走过的路程route.看第一个人被搭 ...
- python-day10--文件处理
1.文件:是操作系统提供的概念 2. open(r+'文件路径' , '打开方式' , '用什么字符编码') #r 表示原始字符串 eg:open(r'C:\Users\13264\Desktop ...
- Nginx在windows上安装 及 Nginx的配置及优化
https://www.cnblogs.com/Chiler/p/8027167.html http://www.runoob.com/linux/nginx-install-setup.html 前 ...
- PHP:第三章——PHP中表达式函数和匿名函数
<?php header("Content-Type:text/html;charset=utf-8"); //表达式函数和匿名函数 /*$A=function(){ ech ...
- simulate mdns message
use dns-sd command simulate mdns message: dns-sd -R test _test._tcp local 1234 a=1111111111111111111 ...
- pyinstaller又踩一坑, configparser os.mknod
在使用pyinstaller时,有使用configparser模块. 使用相对路径.在pycharm中测试,正常,打包成exe,就出错了 换用绝对路径, print(os.getcwd()) fp_d ...
- L232 No methane on Mars
On earth, most of the methane in the atmosphere has been belched by living organisms, so finding the ...
- Redis Cluster(Redis集群)的搭建和使用
Reids集群准备知识: (1)Redis集群介绍 Redis 集群是一个提供在多个Redis间节点间共享数据的程序集. Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据 ...