![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
倍增
AndreaQ
除非宇宙爆炸,地球毁灭,战争爆发,而你时日无多,否则,一切还来得及!
展开
-
CodeForces - 1175E Minimal Segment Cover
题目链接:https://codeforces.com/problemset/problem/1175/E 题目大意:给n个区间,询问m次,每次给出能覆盖【x,y】最少的区间数。 假如询问一次,可以考虑用贪心做,但是此题询问m次,可以用倍增的方法计算出来。 思路: r【i】:表示从i开始能覆盖的最大的右端点值。 更新r[i]:(1)因为可能有多个区间从i开始,取右端点最大的1个。 时预处理, r[x]=max(r[x],y); (2) i的左边i-1也可以...原创 2021-03-20 22:22:12 · 148 阅读 · 0 评论 -
POJ - 2019 Cornfields
题目链接:https://vjudge.z180.cn/problem/POJ-2019/origin 题意:给定一个n*n的数字矩阵,有q个询问,每次询问以(r,l)为左上角,边长为b的小矩阵中最大与最小值之差。 思路:用二维倍增数组解决。 我们考虑一个更一般的,以(r,l)为左上角,长跟宽分别为a,b的矩阵的最值问题。 1.、状态:dp[k1][k2][i][j],表示以(i,j)为左上角,长跟宽长度分别为2^k1,2^k2的矩阵的最值。(下面以最大值为例) 2、状态转移:dp[k1][.原创 2021-03-09 21:24:06 · 114 阅读 · 0 评论 -
POJ - 3368 Frequent values
题目链接:http://poj.org/problem?id=3368 题目大意:有一个单调不减的数列a,求某区间的数出现次数最多为多少? 思路: 设a数组依次为1 1 1 2 2 3 3 1、把a数组浓缩为一个b数组,则b为 3 2 2,即b数组存放a每个数出现的次数。 2、用一个belong数组存放a中每个数对应b数组的下标。 则belong 数组为 1 1 1 2 2 3 3. 3、对于任意区间,两端的数可能没有完全取完。如 区间 【2,5】为 1 1 2 2,左边的...原创 2021-03-09 16:01:10 · 98 阅读 · 0 评论 -
倍增数组基础
应用: 给定一个数列a, 基本的倍增数组可以用O(1)的时间复杂度计算出区间[i,j]的最值。 具体操作: 维护倍增数组 1、状态 dp[j][i]表示区间从i到 i+(2^j)-1,即以i开始长度为2^j 这个区间范围的最值。(下面以最小值为例) 2、状态转移方程:dp[j][i]=min{dp[j-1][i],dp[j-1][i+(1<<(j-1))]}; 3、边界值:dp[0][i]=a[i...原创 2021-03-09 10:48:49 · 314 阅读 · 0 评论