BZOJ 3295 动态逆序对 | CDQ分治
BZOJ 3295 动态逆序对
这道题和三维偏序很类似。某个元素加入后产生的贡献 = time更小、pos更小、val更大的元素个数 + time更小、pos更大、val更小的元素个数。
分别用类似CDQ分治求三维偏序的方法求即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
#define space putchar(' ')
#define enter putchar('\n')
template <class T>
void read(T &x){
char c;
bool op = 0;
while(c = getchar(), c < '0' || c > '9')
if(c == '-') op = 1;
x = c - '0';
while(c = getchar(), c >= '0' && c <= '9')
x = x * 10 + c - '0';
if(op) x = -x;
}
template <class T>
void write(T x){
if(x < 0) putchar('-'), x = -x;
if(x >= 10) write(x / 10);
putchar('0' + x % 10);
}
const int N = 1000005;
ll n, m, tr[N];
ll ans[N];
struct Point {
ll pos, val, tim;
bool operator < (const Point &b) const{
return tim < b.tim;
}
} p[N];
bool cmp(const Point &a, const Point &b){
return a.val > b.val;
}
void add(int p, ll x){
while(p <= n) tr[p] += x, p += p & -p;
}
ll ask(int p){
ll ret = 0;
while(p) ret += tr[p], p -= p & -p;
return ret;
}
void solve(int l, int r){
if(l == r) return;
int mid = (l + r) >> 1;
solve(l, mid), solve(mid + 1, r);
sort(p + l, p + mid + 1, cmp);
sort(p + mid + 1, p + r + 1, cmp);
int pl = l, pr = mid + 1;
while(pr <= r){
while(pl <= mid && p[pl].val > p[pr].val)
add(p[pl].pos, 1), pl++;
ans[p[pr].tim] += ask(p[pr].pos);
pr++;
}
while(--pl >= l) add(p[pl].pos, -1);
pl = mid, pr = r;
while(pr > mid){
while(pl >= l && p[pl].val < p[pr].val)
add(p[pl].pos, 1), pl--;
ans[p[pr].tim] += ask(n) - ask(p[pr].pos);
pr--;
}
while(++pl <= mid) add(p[pl].pos, -1);
}
int main(){
read(n), read(m);
for(int i = 1, x; i <= n; i++)
read(x), p[x].val = x, p[x].pos = i;
for(int i = 1, x; i <= m; i++)
read(x), p[x].tim = n - i + 1;
for(int i = 1, cnt = 1; i <= n; i++)
if(!p[i].tim) p[i].tim = cnt++;
sort(p + 1, p + n + 1);
solve(1, n);
for(int i = 2; i <= n; i++)
ans[i] += ans[i - 1];
for(int i = n; i > n - m; i--)
write(ans[i]), enter;
return 0;
}
BZOJ 3295 动态逆序对 | CDQ分治的更多相关文章
- bzoj 3295 动态逆序对 CDQ分支
容易看出ans[i]=ans[i-1]-q[i],q[i]为删去第i个数减少的逆序对. 先用树状数组算出最开始的逆序对,预处理出每个数前边比它大的和后边比它小的,就求出了q[i]的初始值. 设b[i] ...
- P3157 动态逆序对 CDQ分治
动态逆序对 CDQ分治 传送门:https://www.luogu.org/problemnew/show/P3157 题意: 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对 ...
- [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分治
[BZOJ3295][Cqoi2011]动态逆序对 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依 ...
- BZOJ3295 [Cqoi2011]动态逆序对 —— CDQ分治
题目链接:https://vjudge.net/problem/HYSBZ-3295 3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 1 ...
- BZOJ 3295: [Cqoi2011]动态逆序对 [CDQ分治]
RT 传送门 首先可以看成倒着插入,求逆序对数 每个数分配时间(注意每个数都要一个时间)$t$,$x$位置,$y$数值 $CDQ(l,r)$时归并排序$x$ 然后用$[l,mid]$的加入更新$[mi ...
- bzoj 3295 动态逆序对 (三维偏序,CDQ+树状数组)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3295 思路: 可以将这道题看成倒着插入,这样就可以转化成求逆序对数,用CDQ分治降维,正反用 ...
- [CQOI2011]动态逆序对 CDQ分治
洛谷上有2道相同的题目(基本是完全相同的,输入输出格式略有不同) ---题面--- ---题面--- CDQ分治 首先由于删除是很不好处理的,所以我们把删除改为插入,然后输出的时候倒着输出即可 首先这 ...
随机推荐
- python OptionParser模块使用
OptionParser是python中用来处理命令行的模块,在我们使用python进行流程化开发中必要的工具 Optparse,它功能强大,而且易于使用,可以方便地生成标准的.符合Unix/Posi ...
- lua字符串类型
Lua中字符串结构体的定义是: typedef union TString { L_Umaxalign dummy; /* ensures maximum alignment for strings ...
- 【Unity Shader】Shader基础
目录 Chapter3 Unity Shader 基础 Chapter3 Unity Shader 基础 概述 在Unity需要材质(Material)与Unity Shader配合使用来达到满意的效 ...
- Redis Jedis简介
Redis是一种基于内存类型的数据存储工具 Jedis是一个用java写的Redis数据库操作的客户端,通过Jedis,可以很方便的对redis数据库进行操作.Jedis通过Jedis Pool进行R ...
- js中 null, undefined, 0,空字符串,false,不全等比较
null == undefined // true null == '' // false null == 0 // false null == false // false undefined = ...
- Maven学习记录3——创建、编译、打包、运行项目
http://blog.csdn.net/yaya1943/article/details/48464371
- 第31次Scrum会议(11/19)【欢迎来怼】
一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/11/19 17:05~17:34,总计29min. 地 ...
- MathExam6378
我的第一个程序 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 15 10 • Estima ...
- Go Going软件需求规格说明书
1.目标是什么,目标不包括什么? 我们软件的目标是让大学生走出校园,用最小的花费到更多的地方去,开阔视野,读万卷书再行万里路. 目标暂且不包括外校学生 2.用户和典型场景是什么? 用户:在校大学生 典 ...
- APP案例分析之华为浏览器
第一部分 对华为浏览器的调研,评测 1.对华为浏览器的第一次上手体验 我会使用华为浏览器呢,是因为我买的手机是华为nova,该浏览器也是手机里面预装的.刚开始用的时候也没太注意,感觉跟以前用的其他浏 ...