st表、RMQ和LCA

让人想犯罪 __ 提交于 2020-10-23 17:39:33

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int lca(int x,int y)
{
    if(de[x]<de[y]) swap(x,y);
    int d=de[x]-de[y];
    for(int i=log2(d);i>=0;i--)
    {
        if(d&(l<<i))
        {
            x=fa[x][i];
        }
    }
    for(int i=log2(n);i>=0;i--)
    {
        if(fa[x][i]!=fa[y][i])
        {
            x=fa[x][i];
            y=fa[y][i];
        }
    }
    if(x!=y)
    {
        return fa[x][0];
    }
    else
    {
        return x;
    }
}

 

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!