首页 > 其他分享 >线段树二分

线段树二分

时间:2023-10-30 15:35:23浏览次数:35  
标签:二分 gcd 递归 线段 查询 区间 log

image

修改操作可以很简单的在线段树上打标记即可。

常规做法直接二分 R 然后区间查询 gcd,复杂度是仨log。

upded:其实也是俩log,线段树查询区间gcd是单 log。

注意到你会将区间拆分成 log 个子区间,直接查询他们的 gcd 即可,直接查询为什么不会多乘个 log 呢。

注意到对两个数 \(x,y\) 做 gcd 分为两种情况。

1.一个是另一个的倍数,此时做 gcd 是 \(O(1)\) 的

2.不存在一个是另一个的倍数,此时他们的 gcd 至少为两者较小的那个数的一半,最坏情况也就是两者为斐波那契数列的相邻两项,一次gcd要log,但是以后每一次gcd就会变成 \(O(1)\),所以均摊下来查询的时候不会直接多乘个 log

高端的做法是,先转换求最小的 R 满足区间 gcd \(\le k\)

维护一个 \(cur\) 表示当前的 gcd,从左往右找到线段树上左端点 \(\ge L\) 的区间。

如果区间 gcd 和 \(cur\) 的gcd 大于 \(k\),就继续往右找下一个区间。

否则就在当前区间递归,先考虑左儿子,如果gcd 大于 k 就向右儿子递归,否则向左儿子递归。

每次向右找区间最坏情况是找了 log 个区间,然后只会进入一个区间进行递归,递归复杂度也是单 log,再带上 gcd 的复杂度就是俩 log

标签:二分,gcd,递归,线段,查询,区间,log
From: https://www.cnblogs.com/Hanghang007/p/17797973.html

相关文章

  • 数据结构与算法 | 二分搜索(Binary Search)
    二分搜索(BinarySearch)文承上篇,搜索算法中除了深度优先搜索(DFS)和广度优先搜索(BFS),二分搜索(BinarySearch)也是最基础搜索算法之一。二分搜索也被称为折半搜索(Half-intervalSearch)也有说法为对数搜索算法(LogarithmicSearch),用于在已排序的数据集中查找特定元素。搜索过程从排序数......
  • 二分查找模版
    给定一个有序数组nums,求数组中第一个>=目标值target的下标位置和最后一个>=目标值target的下标位置。这是一道基础的二分查找问题,关于二分的写法有很多种,难点在于对于二分边界的处理,代码编写的过程中很容易容易出现死循环问题,因此建议套用现成的一些二分模版,关于二分模版网上有很......
  • [计算机学习]Python 二分法
    二分法的思想二分查找的前提是对象是有序数据。以下内容摘自Pythontip.com网站。扫描二维码可以了解更多Python课程。 left=0right=sizeofarray#数组的大小while(left+1<right)mid=(left+right)/2#中间mid下标if(array[mi......
  • 二分算法习题汇总
    一、复制书稿题目描述现在要把\(m\)本有顺序的书分给\(k\)个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三、第四本书给同一个人抄写。现在请你设计一种方案,使得复制时间最短。复制时间为抄写页数......
  • 可持久化线段树学习笔记
    可持久化线段树前置知识:动态开点线段树基本介绍可持久化线段树可以维护多个版本信息。举个例子:你需要维护这样的一个长度为\(N\(1\len\le10^6)\)的数组,支持如下几种操作在某个历史版本上修改某一个位置上的值访问某个历史版本上的某一位置的值每次操作后生成一......
  • 第 116 场双周赛(双指针,背包问题,线段树+lz标记)
     本题为双指针和贪心。当我们遇到奇数个0或1时,直接将下一位改变即可。classSolution{public:intminChanges(strings){intn=s.size();intres=0;intl=0,r=-1;while(r++<n-1){if(s[l]==s[r])......
  • C语言二分查找法新手
    如果有一天我们想通过输入一个数去查找这个数在数组的下标。我们应该怎么去实现呢?首先我们肯定要创建一个数组组,我们知道数组的数组是从零开始的,首先呢,我们要了解二分查找法可以在百度里面查到。二分查找也称折半查找,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采......
  • 学习笔记:二分图
    二分图引入二分图又被称为二部图。二分图就是可以二分答案的图。二分图是节点由两个集合组成,且两个集合内部没有边的图。换言之,存在一种方案,将节点划分成满足以上性质的两个集合。性质如果两个集合中的点分别染成黑色和白色,可以发现二分图中的每一条边都一定是连接一个黑色......
  • 数据结构与算法(LeetCode)第一节:认识复杂度,对数器,二分法与异或运算
    一、认识复杂度1.评估算法优劣的核心指标:时间复杂度:当完成了表达式的建立,只要把最高阶项留下即可。低阶项都去掉,高阶项的系数也去掉,记为O(去掉系数的高阶项);​ 时间复杂度是衡量算法流程的复杂度的一种指标,该指标只与数据量有关,与过程之外的优化无关常见的时间复杂度(从好到坏)O......
  • 关于 wqs 二分的几何意义的思考
    我们知道,wqs二分是通过二分斜率,通过找到切凸包的切点来寻找答案(至少我目前写的简单题是这样的)。那么所谓切凸包的几何意义是什么?我们以LGP5633最小度限制生成树为例。对于样例,我们设\(f(x)\)为节点\(s\)恰为\(x\)度的情况下最小生成树的权值,画出凸包。由于偏移量是......