zoukankan      html  css  js  c++  java
  • (RMQ版)LCA注意要点

    1 inline int lca(int x,int y){    if(x>y)    swap(x,y);
    2     return (h[rmq[log[y-x+1]][x]]<h[rmq[log[y-x+1]][y-near[y-x+1]+1]])?
    3     rmq[log[y-x+1]][x]:rmq[log[y-x+1]][y-near[y-x+1]+1];}

    查询代码如上

    1     build(1,0);
    2     for(int i=1;i<=N;i++)
    3         rmq[0][i]=list[i];
    4     for(int i=1,j=0,k=1;i<=N;log[i]=j,near[i]=k,i++)
    5         if(i>k*2)    j++,k*=2;
    6     for(int i=1,k=2;k<=N;i++,k*=2)
    7         for(int j=1;j<=N-k+1;j++)
    8             rmq[i][j]=(h[rmq[i-1][j]]<h[rmq[i-1][j+k/2]])?rmq[i-1][j]:rmq[i-1][j+k/2];

    初始化代码如上

    (懒得贴build了,而且各题目有所不同)

    在build中,每次到一个点的时候记录一下,每找完一个儿子再记录一次


    容易写错的点(也就我这种蒟蒻才会写错这么简单的东西吧)

    1.找的时候找的是pos,不要用原数

    2.初始化的时候k永远大于等于i/2小于i

    3.比较的是h,返回的是rmq(这个不是很容易错)

    一定要分清原数和dfs序的关系

    都是细节,每次都在调这种东西

  • 相关阅读:
    软件需求分析阅读笔记1
    在Ubuntu上搭建Zookeeper集群
    第三周学习进度总结
    读书计划
    假期周进度报告3
    热词分析及解释
    假期周进度报告(二)
    假期周进度报告(一)
    PHP商城
    第十六周总结
  • 原文地址:https://www.cnblogs.com/wanglichao/p/5751908.html
Copyright © 2011-2022 走看看