BZOJ3295:[CQOI2011]动态逆序对(CDQ分治)
Description
Input
Output
Sample Input
1
5
3
4
2
5
1
4
2
Sample Output
5
2
2
1
Solution
给每个被删除的元素打一个删除时间$t$,设下标为$x$,权值为$y$,那么删除一个元素后,减少的逆序对个数为:
1、$t$比它大,$x$比它小,$y$比它大。
2、$t$比它大,$x$比它大,$y$比它小。
$CDQ$统计一下就好了……
读错题把删除元素看成删除下标真的智障。
Code
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define N (100009)
#define LL long long
using namespace std; struct Que
{
int x,y,t;
bool operator < (const Que &a) const
{
return t>a.t;
}
}a[N],tmp[N]; int n,m,c[N],q[N],ans[N],pos[N];
LL sum; inline int read()
{
int x=,w=; char c=getchar();
while (c<'' || c>'') {if (c=='-') w=-; c=getchar();}
while (c>='' && c<='') x=x*+c-'', c=getchar();
return x*w;
} void Update(int x,int k)
{
for (; x<=n; x+=(x&-x)) c[x]+=k;
} int Query(int x)
{
int ans=;
for (; x; x-=(x&-x)) ans+=c[x];
return ans;
} void CDQ1(int l,int r)
{
if (l==r) return;
int mid=(l+r)>>;
CDQ1(l,mid); CDQ1(mid+,r);
int i=l,j=mid+,k=l-;
while (i<=mid || j<=r)
if (j>r || i<=mid && a[i].x<a[j].x)
{
Update(a[i].y,);
tmp[++k]=a[i]; ++i;
}
else
{
ans[a[j].y]+=Query(n)-Query(a[j].y);
tmp[++k]=a[j]; ++j;
}
for (int i=l; i<=mid; ++i) Update(a[i].y,-);
for (int i=l; i<=r; ++i) a[i]=tmp[i];
} void CDQ2(int l,int r)
{
if (l==r) return;
int mid=(l+r)>>;
CDQ2(l,mid); CDQ2(mid+,r);
int i=l,j=mid+,k=l-;
while (i<=mid || j<=r)
if (j>r || i<=mid && a[i].x>a[j].x)
{
Update(a[i].y,);
tmp[++k]=a[i]; ++i;
}
else
{
ans[a[j].y]+=Query(a[j].y-);
tmp[++k]=a[j]; ++j;
}
for (int i=l; i<=mid; ++i) Update(a[i].y,-);
for (int i=l; i<=r; ++i) a[i]=tmp[i];
} int main()
{
n=read(); m=read();
for (int i=; i<=n; ++i) a[i].x=i, a[i].y=read(), pos[a[i].y]=i;
for (int i=; i<=m; ++i) a[pos[q[i]=read()]].t=i;
for (int i=; i<=n; ++i) if (!a[i].t) a[i].t=m+; for (int i=; i<=n; ++i) sum+=Query(n)-Query(a[i].y), Update(a[i].y,);
for (int i=; i<=n; ++i) Update(a[i].y,-);
sort(a+,a+n+); CDQ1(,n);
sort(a+,a+n+); CDQ2(,n); for (int i=; i<=m; ++i) printf("%lld\n",sum), sum-=ans[q[i]];
}
BZOJ3295:[CQOI2011]动态逆序对(CDQ分治)的更多相关文章
- [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 ...
- 【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治
[BZOJ3295][Cqoi2011]动态逆序对 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依 ...
- bzoj3295 [Cqoi2011]动态逆序对 cdq+树状数组
[bzoj3295][Cqoi2011]动态逆序对 2014年6月17日4,7954 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数. ...
- [CQOI2011]动态逆序对 CDQ分治
洛谷上有2道相同的题目(基本是完全相同的,输入输出格式略有不同) ---题面--- ---题面--- CDQ分治 首先由于删除是很不好处理的,所以我们把删除改为插入,然后输出的时候倒着输出即可 首先这 ...
- 洛谷 P3157 [CQOI2011]动态逆序对 | CDQ分治
题目:https://www.luogu.org/problemnew/show/3157 题解: 1.对于静态的逆序对可以用树状数组做 2.我们为了方便可以把删除当成增加,可以化动为静 3.找到三维 ...
- BZOJ 3295: [Cqoi2011]动态逆序对 [CDQ分治]
RT 传送门 首先可以看成倒着插入,求逆序对数 每个数分配时间(注意每个数都要一个时间)$t$,$x$位置,$y$数值 $CDQ(l,r)$时归并排序$x$ 然后用$[l,mid]$的加入更新$[mi ...
- P3157 [CQOI2011]动态逆序对 CDQ分治
一道CDQ分治模板题简单来说,这道题是三维数点对于离线的二维数点,我们再熟悉不过:利用坐标的单调递增性,先按更坐标排序,再按纵坐标排序更新和查询时都直接调用纵坐标.实际上,我们是通过排序将二维中的一维 ...
随机推荐
- [AGC 018 E] Sightseeing plan
STO ZKY ORZ Description 给定一张网格图和三个矩形,每次只能向上或向右走.你需要从矩形 \(A\) 中的一个点 \(S\) 出发,到达矩形 \(B\) 中的一个点 \(P\) , ...
- [转]如何将Angular localhost:4200 改为IP
本文转自:https://blog.csdn.net/ygznx/article/details/78249118 ust specify the IP in --host option like n ...
- C#基础知识回顾-- 反射(4)
从程序集获得类型 先说点题外话,现在技术真的发展太快了.我这边还很多东西半生不熟 呢,那边又出现了好多有趣的新东西让你眼红不已.学还是不学这还真是 个问题.Node.js .bootstrap,我最近 ...
- AngularJS+Ionic开发-1.搭建开发环境
临时项目需要使用AngularJS+Ionic+Cordova技术,半年前跟别人用过一段时间做过几个页面,目前别人已经无法联系了,只能我自己上了. 上次做完项目后,想抽时间好好巩固一下这方面的知识面来 ...
- [日常] Go语言圣经-字节切片与字符串
1.一个字符串是一个不可改变的字节序列2.文本字符串通常被解释为采用UTF8编码的Unicode码点(rune)序列3.内置的len函数可以返回一个字符串中的字节数目4.第i个字节并不一定是字符串的第 ...
- elasticsearch6.7 05. Document APIs(3)GET API
2.GET API get API 可以通过文档id从索引中获取json格式的文档,以下示例从twitter索引中获取type为_doc,id值为0为的JSON文档: GET twitter/_doc ...
- html页面边框的另一种写法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 解说css中的margin属性缩写方式
<html> <body> <div style="border: 1px solid red;"> <div style="b ...
- oracle数据库相关概念介绍
数据库相关概念介绍: 问题: 数据存储:变量(基本类型,引用类型) 基本类型:少量数据 引用类型:保证数据的完整性 数据源: 声明直接赋值 IO流从硬盘中读取 java在处理数据时,需要从硬盘中读取数 ...
- mysql之数据备份与还原
mysql数据备份 #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境.但不能恢复到异构系统中如Windows. #2. 逻辑备份: 备份的是建表.建库.插入等操作所执行SQL语句,适用于中 ...