![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
倍增
文章平均质量分 54
_kikyou-
这个作者很懒,什么都没留下…
展开
-
P3509 [POI2010]ZAB-Frog (尺取+倍增)
传送门 数轴上有n个点按点权大小升序排列,每个点上有一只青蛙,各自独立行动。每一步都会跳到距离他第k近的点(,距离等于点权之差的绝对值,如果存在两个这样的点,就跳到下标较小的那个), 问每只青蛙跳m步之后到达的位置。 (1<=n<=1e6,1<=m<=1e18) 首先我们通过尺取法预处理出每只青蛙跳一步到达的位置。 然后倍增即可。 to[i][j]=to[to[i][j-1]][j-1] 枚举m的二进制的每一位,每次跳2^i步。 #include<bits/stdc++.h&g原创 2021-11-12 21:22:24 · 362 阅读 · 0 评论 -
E. Minimal Segment Cover (贪心+倍增)
传送门 给定一个数轴,给定n条线段,每条线段可以覆盖[li,ri]的位置,q次询问,每次问如果要覆盖[l,r],最少要选多少条线段。 先考虑一个贪心的暴力解法: 对于询问[L,R],假设当前位置为l,我们要从左端点小于等于l的线段中找到一个最大的右端点r,并让当前位置更新为r,直到R==r 。 尽管我们可以预处理得到a[i]表示从i位置只选一个线段能到达右边最远的位置是哪里, 暴力解法时间复杂度仍为 O(nq). 既然i位置能够选一条线段最远到达a[i],同时a[i]位置能选一条线段最远到达a[a[i]原创 2021-11-11 21:58:52 · 479 阅读 · 1 评论