首页 > 其他分享 >分治

分治

时间:2024-09-08 09:02:26浏览次数:7  
标签:分治 mid 斜率 cdq 维护 下凸壳

由 ryz 讲解

什么是分治?

  • 把一个较大规模的问题分成若干个较小规模的问题。
  1. 小规模的问题与原问题不同(根号分治)

  2. 小规模的问题与原问题相同(对数分治)

二分就是一种对数分治的方法。

操作序列分治

cdq 分治

修改和询问的整体分治也被称为 cdq 分治。

要求:修改对询问具有可加性

主要操作:

  1. 将所有操作离线

  2. 对于区间 \([l,r]\),选取中点 \(mid\),只统计左修改对右的贡献

  3. 递归 \([l, mid], [mid + 1, r]\)

无题号 函数

三种操作,加入一个一次函数,删除一个函数,求 \(x_g\) 处所有函数的最大值,\(n\le 10^6\)。

第一眼看上去是线段树分治(),但是要求用 cdq 做。

考虑维护一个下凸壳,插入好做,删除不好做

考虑把删除改成增加,倒着扫,从 \(r\rightarrow mid + 1\),用平衡树维护下凸壳。

  • 如何用平衡树维护下凸壳

注意到斜率是单增的,考虑维护这个东西。

他肯定是包含了一个斜率区间,然后切掉了两端直线的部分

那么我们维护两个东西:凸包上的斜率,交点的 \(x\) 坐标

然后平衡树找到斜率之后,直接向前向后枚举被删除掉的斜率,维护这两个东西就行

标签:分治,mid,斜率,cdq,维护,下凸壳
From: https://www.cnblogs.com/LUlululu1616/p/18402564

相关文章

  • 点分治
    先写静态点分治,带修改的还没学,咕咕咕点分治是用于处理树上简单路径统计的一种算法,利用分治的思想,对每一课子树统计答案,最后累加(看起来就很暴力)所以我们要对其进行优化,将每一棵树按重心进行分割,再逐个处理子树,整体复杂度在\(O(nlog_n)\)左右求重心需要\(dfs\)一遍,对每一个......
  • 点分治与 cdq 分治
    声明:本文仅供阅读参考,请严格按照学校相关规定下使用希沃一体机。阅读本文,你需要知道一下几点:什么是希沃管家希沃管家,就是一个集成了学校管理、防护功能和系统保护于一体的东西。在希沃管家页面右上角,你可以看到你的学校名称,这就代表此设备已经接入学校的管理系统。在管理系统......
  • 线段树分治
    前置知识:可撤销化并查集注意:可撤销化并查集的作用和删边不一样,其只能撤销最近的一次操作。既然只需撤销,那么只需在合并并查集时用个vector记录下合并的哪两个点,撤销时就直接还原就行了。这里要强调一下,可撤销化并查集不能路径压缩,只能启发式合并。代码intf[MAXN],sz[MAXN......
  • 算法设计与分析:实验二 分治法——最近点对问题
    实验内容:对于平面上给定的N个点,给出所有点对的最短距离,即,输入是平面上的N个点,输出是N点中具有最短距离的两点。要求随机生成N个点的平面坐标,应用蛮力法编程计算出所有点对的最短距离。要求随机生成N个点的平面坐标,应用分治法编程计算出所有点对的最短距离。分别对N=100000—10......
  • 感染 点分治优化建图
    I国有\(n\)个城市,有\(n-1\)条道路连接,并且所有的城市相互可达。城市因为自身的交通因素,人口因素,有一个传染力\(r_i\),一旦这个城市爆发疫情,会迅速感染其他距离小于等于\(r_i\)的其他城市,并且造成连锁反应。问一开始最少几个受到境外输入,会导致整个国家\(n\)个城市全部......
  • 【题解】Solution Set - NOIP2024集训Day14 CDQ分治
    【题解】SolutionSet-NOIP2024集训Day14CDQ分治https://www.becoder.com.cn/contest/5482「CF364E」EmptyRectangles*3000摆烂了。「SDOI2011」拦截导弹CDQ的例题,之前做过(现在试图自己再做出来。第二问只用在第一问里面记录每一次是从哪个\(j\)​转移过来的,以及......
  • Scratch编程深度探索:解锁递归与分治算法的奥秘
    标题:Scratch编程深度探索:解锁递归与分治算法的奥秘在编程的世界里,递归和分治算法以其精妙的逻辑结构和解决问题的能力而著称。Scratch,这款专为儿童和初学者设计的图形化编程工具,是否能够支持实现这样复杂的逻辑呢?本文将深入探讨Scratch在实现递归和分治算法方面的能力,并提......
  • (算法)计算右侧⼩于当前元素的个数————<分治-归并排序>
    1.题⽬链接:315.计算右侧⼩于当前元素的个数2.题⽬描述:3.解法(归并排序):算法思路:这⼀道题的解法与求数组中的逆序对的解法是类似的,但是这⼀道题要求的不是求总的个数,⽽是要返回⼀个数组,记录每⼀个元素的右边有多少个元素⽐⾃⼰⼩。但是在我们归并排序的过程中,元素的下......
  • (算法)翻转对————<分治-归并排序>
    1.题⽬链接:493.翻转对2.题⽬描述:题⽬解析:翻转对和逆序对的定义⼤同⼩异,逆序对是前⾯的数要⼤于后⾯的数。⽽翻转对是前⾯的⼀个数要⼤于后⾯某个数的两倍。因此,我们依旧可以⽤归并排序的思想来解决这个问题。3.解法(归并排序):算法思路:⼤思路与求逆序对的思路⼀样,就......
  • Codeforces Round 967 (Div. 2) C题 类分治解法
    废话不多说,先上代码t=int(input())whilet>0:n=int(input())pre_d={1:[iforiinrange(2,n+1)]}pair_l=[]whilelen(pre_d)!=0:item=pre_d.items()now_d={}fork,vinitem:forii......