线段树优化建图一种编号方式的理解

news/2024/11/14 12:53:24/文章来源:https://www.cnblogs.com/classblog/p/18315792
int id(int l,int r) {return (l+r)|(l!=r);} //代码1

证明思路:引导并说明某种做法发生冲突的情况,并证明修改后不会发生冲突

首先让我们考虑如果为

int id(int l,int r) {return (l+r);} //代码2

会出现什么冲突,如图

本图为uoj群友 南门阳德 提供,在此感谢

此时 [1,3] 与 [2,2] ,[1,5] 与 [3,3] 冲突

结论1:线段树中序遍历节点l+r单调不降,且节点u只在长度为奇数时会与左儿子右链端点的l+r相同

显然对于每一个节点u,\(l_{lson}+r_{lson}<l_u+r_u<l_{rson}+r_{rson}\)

因此我们只需要证明任意节点u大于等于其左儿子的右链终点

\(r_u-l_u+1\) 为奇数,则左儿子右链端点为 \((l_u+r_u)/2\),结论成立

\(r_u-l_u+1\) 为偶数,则左儿子右链端点为 \((l_u+r_u-1)/2\),结论成立

结论2: \(l_u+r_u\) 小于右儿子左链终点

与结论1证法相同

结论3:叶结点 \(l_u+r_u\) 为偶数

由结论1,只有节点u在长度为奇数时会与左儿子右链终点冲突。

由结论2,节点u不会与右子树冲突。

此时我们选择对于非叶结点长度为奇数的点,将其编号加1。(冲突解决措施,即代码1)

由结论2,3,因为长度为奇数的节点l+r为偶数,叶结点与其不同且也为偶数,因此将父节点加1后,与右儿子左链终点仍不冲突。

因此该编号方式正确。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/758686.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣-动态规划全解

目录动态规划斐波那契数列-EASY爬楼梯-EASY使用最小花费爬楼梯-EASY不同路径-Middle不同路径II-Middle不同路径 III-HARD整数拆分-MID*不同的二叉搜索树-MID背包问题-理论基础分割等和子集-EASY最后一块石头的重量 II-MID目标和-MID *一和零-MID*53-最大子数组和-中等918-环形子…

能源公司 Turcomp 通过 NocoBase 实现敏捷、安全开发

深入了解 Turcomp 如何利用 NocoBase 加快开发进度,并符合安全要求。NocoBase 是一个极易扩展的开源无代码开发平台。完全掌控,无限扩展,助力你的开发团队快速响应变化,显著降低成本,不必投入几年时间和数百万资金研发,只需要花几分钟部署 NocoBase。 NocoBase 中文官网 …

宝塔安装wordpress,ftp

宝塔安装好ftp, 在后台配置账户 状态: 服务器回应不可路由的地址。使用服务器地址代替,遇到这类报错,是filezilla配置问题, 只需要

Qt+OpenCascade开发笔记(一):occ的windows开发环境搭建(一):OpenCascade介绍、下载和安装过程

前言Open CASCADE是由Open Cascade SAS公司开发和支持的开源软件开发平台,旨在为特定领域快速开发程序而设计。它是一个面向对象的C++类库,提供了丰富的几何造型、数据交换和可视化等功能,成为许多CAD软件的核心组件。  本篇描述下载和安装过程。 OpenCascade(OCC)概述O…

自定义过滤器

代码实现: from flask import Flask,render_templateapp = Flask(__name__)def get_top3(list): #返回列表前三个return list[:3] #方式一:注意一个过滤器 app.jinja_env.filters["get_top"]=get_top3#方式二 @app.template_filter(get_qu) def get_qu(lis): #返…

在构建Docker时执行yum -y install gcc报错解决方案

1、在构建docker时,执行yum -y install gcc报一下错误 2、解决方案:更换镜像 执行以下指令: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backupwget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 3、…

Dos 解决端口占用

三步走: 第一步:netstat -ano | findstr 你要解决的端口号 第二步:tasklist | findstr 查看到的进程号 第三部:taskkill /f /t /im 进程名

【mitmproxy】使用mitmproxy录制grpc流量

一、官网 https://www.mitmproxy.org/二、文档 https://docs.mitmproxy.org/stable/三、安装 1、二进制 2、使用pip安装pip install mitmproxy三、启动服务端 四、测试 1、使用代理发送客户端请求$ http_proxy=http://127.0.0.1:8080 python async_greeter_client.py2、检查相…

技术文档必备工具:注释目录树神器 Annotree,我的第一个正式开源项目

hi,大家好,我是爱听书的程序员阿超 非常开心能在这里介绍我的第一个正式开源项目 Annotree,项目具体情况如下,请继续阅读📖~Annotree 注释树一款生成带注释的目录树工具,大大方便技术文档的编写 项目介绍 🎉本项目基于 folder-explorer 进行二次开发,感谢 FairyEver …

docker-compose部署kafka-ui部署以及使用

1.docker-compose配置脚本version: "3"services: kafka-ui:image: provectuslabs/kafka-ui:v0.7.2container_name: kafka-uihostname: kafka-uiprivileged: truerestart: alwaysenvironment:- DYNAMIC_CONFIG_ENABLED=true- AUTH_TYPE=LOGIN_FORM- SPRING_SECURITY_U…

1.2.2 计算机网络分层结构

一、数据的传输过程(水平视角) 在数据传输的过程中,经过了压缩和解压,在用户的视角上来看,用户感受不到数据经过了压缩和解压的过程。为了支持这样功能,可以指定一个协议YSCS协议(如图)。从图上看,对等的两个实体的通信需要遵循水平的协议,而遵循这些协议是为了…