BZOJ 3295 [Cqoi2011]动态逆序对 ——CDQ分治
时间、位置、数字为三个属性。
排序时间,CDQ位置,树状数组处理数字即可。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define maxn 100005
int a[maxn],q[maxn],n,m,pos[maxn],del[maxn];
struct Event{
int t;//时间
int x;//加入的数
int y;//加入的位置
}b[maxn];
struct Bit_Tree{
int x[maxn];
void add(int i,int f)
{
for (;i<maxn;i+=i&(-i)) x[i]+=f;
}
int gs(int i)
{
int ret=0;
for (;i;i-=i&(-i)) ret+=x[i];
return ret;
}
}BT; bool cmp1(Event a,Event b) {return a.t<b.t;} bool cmp2(Event a,Event b) {return a.y<b.y;} bool cmp3(Event a,Event b) {return a.y>b.y;} ll ans[maxn]; void CDQ(int l,int r,int flag)
{
if (l==r) return ;
int mid=l+r>>1;
CDQ(l,mid,flag); CDQ(mid+1,r,flag);
int pl=l;
if (flag) F(i,mid+1,r)
{
while (b[pl].y<b[i].y&&pl<=mid) BT.add(b[pl++].x,1);
int tmp=BT.gs(n)-BT.gs(b[i].x-1);
ans[b[i].t]+=tmp;
}
else F(i,mid+1,r)
{
while (b[pl].y>b[i].y&&pl<=mid) BT.add(b[pl++].x,1);
int tmp=BT.gs(b[i].x-1);
ans[b[i].t]+=tmp;
}
F(i,l,pl-1) BT.add(b[i].x,-1);
sort(b+l,b+r+1,flag?cmp2:cmp3);
} int main()
{
scanf("%d%d",&n,&m);
F(i,1,n) scanf("%d",&a[i]),pos[a[i]]=i;
F(i,1,m)
{
scanf("%d",&q[i]);
del[q[i]]=1;
b[i].t=n-i+1;
b[i].x=q[i];
b[i].y=pos[q[i]];
}
int now=m;
F(i,1,n)
if (!del[i])
{
b[++now].t=n-now+1;
b[now].x=i;
b[now].y=pos[i];
}
sort(b+1,b+n+1,cmp1);
CDQ(1,n,1);
sort(b+1,b+n+1,cmp1);
CDQ(1,n,0);
F(i,2,n) ans[i]+=ans[i-1];
D(i,n,n-m+1) printf("%lld\n",ans[i]);
}
BZOJ 3295 [Cqoi2011]动态逆序对 ——CDQ分治的更多相关文章
- BZOJ 3295: [Cqoi2011]动态逆序对 [CDQ分治]
RT 传送门 首先可以看成倒着插入,求逆序对数 每个数分配时间(注意每个数都要一个时间)$t$,$x$位置,$y$数值 $CDQ(l,r)$时归并排序$x$ 然后用$[l,mid]$的加入更新$[mi ...
- Bzoj 3295: [Cqoi2011]动态逆序对 分块,树状数组,逆序对
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2886 Solved: 924[Submit][Stat ...
- [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且 ...
- bzoj3295: [Cqoi2011]动态逆序对(cdq分治+树状数组)
3295: [Cqoi2011]动态逆序对 题目:传送门 题解: 刚学完cdq分治,想起来之前有一道是树套树的题目可以用cdq分治来做...尝试一波 还是太弱了...想到了要做两次cdq...然后伏地 ...
- BZOJ3295 [Cqoi2011]动态逆序对 —— CDQ分治
题目链接:https://vjudge.net/problem/HYSBZ-3295 3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 1 ...
- BZOJ 3295: [Cqoi2011]动态逆序对
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3865 Solved: 1298[Submit][Sta ...
- 【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治
[BZOJ3295][Cqoi2011]动态逆序对 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依 ...
- bzoj 3295 [Cqoi2011]动态逆序对(cdq分治,BIT)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3295 [题意] n个元素依次删除m个元素,求删除元素之前序列有多少个逆序对. [思路] ...
- bzoj 3295: [Cqoi2011]动态逆序对(树套树 or CDQ分治)
Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...
随机推荐
- Android中的ListView属性使用总结
Android中使用ListView控件比较常见,如果能知道常用的一些属性使用,肯定会少很多坑. 1.ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景 ...
- 使用 Cosmos DB 创建和查询 NoSQL 表
本教程演示如何使用 Azure 门户创建 Azure Cosmos DB 帐户,然后使用 DocumentDB .NET API 创建具有分区键的文档数据库和集合.通过在创建集合时定义分区键,应用程序 ...
- Oracle种常用性能监控SQL语句
--Oracle常用性能监控SQL语句 --1 SELECT * FROM SYS.V_$SQLAREA WHERE DISK_READS > 100; --2 监控事例的等待 SELECT E ...
- (五)maven之外置maven
eclipse外置maven eclipse内置的maven插件是固定版本,如果要用其他版本的maven,可以使用外置maven. ① 在菜单栏上点击“Windows”à“Preferences ...
- X和面试随笔
第一次参加了面试,面试官很好,我写的笔试和回答的都很差劲,虽然技术方面的回答我想抽自己,但是人家还是要了,给了我一个机会,很感谢. 第一道题:设计一个进销存系统的表结构设计 1:老板每天要知道卖出的货 ...
- 激励CEO们最好的办法就是鼓励他们不要停止思考
我们应该怎样在企业中释放出每一个人都可能内在的自我驱动力呢? 我创业十多年来,结识了很多创业家,他们中很多和我一样也试图通过学习实践找到有效管理的捷径,一个最简单的法则,最好还是比较容易的.事实上,最 ...
- 玄学C语言之scanf,printf
#include <bits/stdc++.h> using namespace std; int main() { int a,c,d; ]; scanf("%d." ...
- ping 不通。无法访问目标主机
台式机 使用无线网卡 又登录了VPN 有时候访问不了局域网内的主机 解决方案 添加路由即可 window+R 打开运行 输入cmd 然后输入 route add 10.16.1.89 10.13 ...
- 漫谈 Clustering (4): Spectral Clustering<转载>
转自http://blog.pluskid.org/?p=287 如果说 K-means 和 GMM 这些聚类的方法是古代流行的算法的话,那么这次要讲的 Spectral Clustering 就可以 ...
- shell脚本,在指定目录下通过随机小写10个字母加固定字符串oldboy批量创建10个html文件。
[root@localhost wyb]# cat test10.sh #!/bin/bash #使用for循环在/test10目录下通过随机小写10个字母加固定字符串oldboy批量创建10个htm ...