倍增

原创 2016年08月30日 21:52:24

][TOC]

例子

快速幂、 斐波那契数列、 RMQ、 树上倍增


RMQ 区间最值查询

*令A[i]存储我们要求最值的数列,F[i][j]表示从第i个位置开始,往后的2^j个数字中,最大的数字是什么
*我们对j从小到大枚举。每次处理.f[i][j]的时候,f[i][0~j−1]都已经处理好了
*因为j最大到logn,所以预处理的复杂度为O(nlogn)


状态转移方程:

f[i][j]=max(f[i][j−1],f[i+2^(j−1)][j−1])

↑ eg. f[5][3]=max(f[5][2],f[9][2]) (f[5][2]是5到9,f[9][2]是9到13)


void init_rmq (int n){
    for(int i=1;i<=n;i++)
        f[i][0]=a[i];
    for(int j=1;(1<<j)<n;++j)
        for(int i=1;i<=n;++i)
            if(i+(1<<j)-1<=n)
                f[i][j]=max(f[i][j-1],
                            f[i+(1<<j-1)][j-1]);
}

int query_rmq(int i,int j){
    int k = log(j-i+1) / log(2);
    return max(f[i][k],f[j-(1<<k)+1][k]);
}

倍增LCA

令father[i][j]记录编号为i的点,往上蹦2^j次的父亲

状态转移方程:

f[i][j]=f[f[i][j-1][j-1]]
注意!!!!!!!!!!数组要开两倍空间!!!!!无向边!!!

初始状态:f[i][0]=a[i-1];
void init_lca (int n){
    for(int j=1;(1<<j)<=n;++j)
        for(int i=1;i<=n;++i)
            if(f[i][j]!=-1)
                f[i][j]=f[f[i][j-1]][j-1];
}

int query_lca(int i,int j){
    int k = log(j-i+1) / log(2);
    return max(f[i][k],f[j-(1<<k)+1][k]);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

SPOJ QTREE2 Query on a tree II

树上倍增

开车旅行

版权声明:本文为博主原创文章,未经博主允许不得转载。 传送门:开车旅行 题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的 城市在编号较大...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

动态树 解题报告

这个题我做的时候没有考虑到一个性质,导致多了一个log,然后麻烦了好多好多。 就是说合并两个区间的时候,我以为左边的最小值会接管右边第一个比它小的左边的一段,所以我要求这一段的最大值。 但是实际上...

【GDOI2018模拟7.9】组合数问题

题解注意到题目的意思就是有n*k个物品,求取x个(x%k=r)物品的方案数的和 考虑杨奎三角f[i][j]=f[i-1][j-1]+f[i-1][j] 注意到这个dp可以用倍增的方法快速搞,即:f...

1036 商务旅行

直接放代码了,练习倍增#include #include #include #include using namespace std; int n,m,q,cnt,tot,deep[30001],he...

货车运输

版权声明:本文为博主原创文章,未经博主允许不得转载。 传送门:货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有 ...

洛谷 P1081 开车旅行(抄)

倍增

【NOIP2012】开车旅行

题目描述:小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 Hi,城市 i...

最近公共祖先 LCA 倍增算法

树上倍增求LCA   LCA指的是最近公共祖先(Least Common Ancestors),如下图所示:   4和5的LCA就是2   那怎么求呢?最粗暴的方法就是先dfs一次,处理...

JIH的玩偶

题目描述 JIH的玩具厂设立以来,发展了一张销售关系网。这张网以玩具厂为总代理(根),构成一颗树。每个节点都代表一个客户,且每个节点都有重要度ai。JIH想将这些客户划成若干类别,当然同一类的客户重...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)