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】动态逆序对的更多相关文章

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

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

  2. bzoj3295[Cqoi2011]动态逆序对 树套树

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 5987  Solved: 2080[Submit][Sta ...

  3. 2018.07.01 BZOJ3295: [Cqoi2011]动态逆序对(带修主席树)

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

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

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

  5. bzoj千题计划146:bzoj3295: [Cqoi2011]动态逆序对

    http://www.lydsy.com/JudgeOnline/problem.php?id=3295 正着删除看做倒着添加 对答案有贡献的数对满足以下3个条件: 出现时间:i<=j 权值大小 ...

  6. BZOJ3295: [Cqoi2011]动态逆序对(树状数组套主席树)

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 7465  Solved: 2662[Submit][Sta ...

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

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

  8. bzoj3295: [Cqoi2011]动态逆序对(cdq分治+树状数组)

    3295: [Cqoi2011]动态逆序对 题目:传送门 题解: 刚学完cdq分治,想起来之前有一道是树套树的题目可以用cdq分治来做...尝试一波 还是太弱了...想到了要做两次cdq...然后伏地 ...

  9. [bzoj3295][Cqoi2011]动态逆序对_主席树

    动态逆序对 bzoj-3295 Cqoi-2011 题目大意:题目链接. 注释:略. 想法:直接建立主席树. 由于是一个一个删除,所以我们先拿建立好的root[n]的权值线段树先把总逆序对求出来,接着 ...

  10. bzoj3295: [Cqoi2011]动态逆序对(树套树)

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

随机推荐

  1. SQLServer创建用户、数据库、表、约束、存储过程、视图

    --创建登录账户和数据库用户 ' exec sp_grantdbaccess 'sysAdmin','aa' --给数据库用户赋权限 grant select,update,insert,delete ...

  2. win10 WiFi 密码查询 命令

    如果你笔记本有WiFi,正好你系统又是Win10 那么... netsh wlan show profile * key=clear

  3. codeforces 700a//As Fast As Possible// Codeforces Round #364(Div. 1)

    题意:n个人要运动ll长,有个bus带其中几个人,问最短时间 最后所有人在同一时间到终点是用时最少的.由于搭bus相当于加速,每个人的加速时间应该一样.先计算bus走过的路程route.看第一个人被搭 ...

  4. python-day10--文件处理

    1.文件:是操作系统提供的概念 2. open(r+'文件路径' , '打开方式' , '用什么字符编码')   #r 表示原始字符串 eg:open(r'C:\Users\13264\Desktop ...

  5. Nginx在windows上安装 及 Nginx的配置及优化

    https://www.cnblogs.com/Chiler/p/8027167.html http://www.runoob.com/linux/nginx-install-setup.html 前 ...

  6. PHP:第三章——PHP中表达式函数和匿名函数

    <?php header("Content-Type:text/html;charset=utf-8"); //表达式函数和匿名函数 /*$A=function(){ ech ...

  7. simulate mdns message

    use dns-sd command simulate mdns message: dns-sd -R test _test._tcp local 1234 a=1111111111111111111 ...

  8. pyinstaller又踩一坑, configparser os.mknod

    在使用pyinstaller时,有使用configparser模块. 使用相对路径.在pycharm中测试,正常,打包成exe,就出错了 换用绝对路径, print(os.getcwd()) fp_d ...

  9. L232 No methane on Mars

    On earth, most of the methane in the atmosphere has been belched by living organisms, so finding the ...

  10. Redis Cluster(Redis集群)的搭建和使用

    Reids集群准备知识: (1)Redis集群介绍 Redis 集群是一个提供在多个Redis间节点间共享数据的程序集. Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据 ...