首页 > 其他分享 >CDQ 分治

CDQ 分治

时间:2023-01-15 10:25:07浏览次数:55  
标签:下标 log 树状 分治 CDQ 数组 逆序

例题

P3157 [CQOI2011] 动态逆序对

  • 题意略。

  • 一开始想了半天,老半天的前后缀主席树做法(分别对前后缀开桶,模仿树状数组求逆序对,算贡献),最后还是发现似乎没办法统计算重的贡献,因为得维护被删掉的点中有多少个下标小且值大或下标大且值小,而且这玩意等效在线。

  • 故还是来考虑一下 CDQ...我们称一个逆序对 \((i,j)\)“属于 \(i\)”,当且仅当 \(t_i<t_j\),这里 \(t_x\) 是第 \(x\) 个元素被删除的时间。对于未被删除的元素,认为 \(t_x=+\infty\)。

  • 于是问题变成求初始序列的逆序对数量和属于每个 \(i\) 的逆序对数量。那么看到这里的属于其实就是 \(([i<j] \oplus [a_i<a_j]) \And t_i<t_j\) 这一三维偏序问题,显然可 CDQ。

  • 首先可以认为是按下标排序,然后套归并的壳子,每次合并的时候维护一下归属就好,实际实现中我的做法是用树状数组当桶储存对面的删除时刻。

  • 复杂度 \(O(n\log^2)\),一只 \(\log\) 是归并,一只是树状数组,常数稍大。

标签:下标,log,树状,分治,CDQ,数组,逆序
From: https://www.cnblogs.com/weixin2024/p/17053133.html

相关文章

  • 分治优化
    概述分治优化常常在DP的转移有某种单向单调性时使用,通过类似整体二分的结构,确保每个决策点只在一条链上出现,从而加速转移。一般这种分治优化也有对应的二分栈形式,区别......
  • 树分治
    概述树分治通过树的唯一连通性质,递归地求解树上路径(主要是路径长度)相关的问题。树分治主要包括点分治和边分治,但到目前为止我都不知道边分治有什么用。点分治......
  • LeetCode刷题(46)~颠倒二进制位【循环/分治】
    题目描述颠倒给定的32位无符号整数的二进制位。示例1:输入:00000010100101000001111010011100输出:00111001011110000010100101000000解释:输入的二进制串0000......
  • [点分治记录] P4292 [WC2010]重建计划
    题目看到需要求的柿子首先想到分数规划。也就是二分答案,然后在check里将所有边权减去$mid$,检验是否有路经权值$\ge$0。现在问题转化成求路径长度在$[l,r]$范围内的权值......
  • 【学习笔记】分治
    分治相关的东西我基本都不会。CDQ分治最经典的分治,一般用于去掉一层偏序。对于一个区间\([l,r]\)的答案,我们可以找一个中点\(mid\),递归计算出\([l,mid]\)的答案......
  • 根号分治
    概述根号分治,是一种对数据进行分治的分治方式。具体来说,如果所要求进行的过程满足如下性质:根号以下的数据的种类很少,可以全部维护之;根号以上的数据,直接暴力的......
  • 点分治与点分树
    点分治和点分树真的是各种意义上的好东西。不仅好玩,而且写完一看自己的代码5.几kb:“wc我今天搞了好多学习”。在做关于树的题时,我们会遇到一类题型:题目跟路径有关,你找到......
  • Tree 树分治
    //题意:询问一棵树上长度不超过k的简单路径有多少条//思路:貌似可以用dsuontree但好像要用到平衡树之类的,之后再看看//https://tqltqltqlorzorzorz.blog.luogu......
  • Race 树分治写法
    //题意:一棵树有边权,询问一条长度为k的简单路径所需的最小步数//思路:点分治,主要是合并的思路,因为是要求最小步数,所以我们对于每一种长度记最小步数即可//#include<bi......
  • 简单聊聊:递归,缓存,分治,回溯
    一、初识递归递归函数=终止条件+递归关系终止条件:当大问题被拆解成能轻松解决的小问题时,运行终止条件中的逻辑递归关系:定义如何将大问题拆解为小问题例子:小名跑步。......