简单线段树模板[通俗易懂]

简单线段树模板[通俗易懂]例如: 给你任意几个数,给定N个区间,让你求这个区间的和;简单线段树的运用,帮助我更好的理解线段树,           //线段树基本#include#defineMAXN100100#defineMINN10000100int num[MAXN],t[MINN];voidbuild(intL,intR,intd){     if(L==R)

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

                 例如:   给你任意几个数,给定N个区间,让你求这个区间的和;简单线段树的运用,帮助我更好的理解线段树,

            //线段树基本
#include<stdio.h>
#define MAXN 100100
#define MINN 10000100
int  num[MAXN],t[MINN];
void build(int L,int R,int d)
{      if(L==R)
         {   t[d]=num[L];
              return ;
         }
        else
        {    int mid=(L+R)/2;
             build(L,mid,d*2);
             build(mid+1,R,2*d+1);
        }
        t[d]=t[2*d]+t[2*d+1];//回溯很重要容易漏;
}
int inqure(int L,int R,int cl,int cr,int d)
{         if(L==cl&&R==cr)
           {  return t[d];
           }
           else
           {    
               int mid=(L+R)/2;
                if(cr<=mid)
                 return inqure(L,mid,cl,cr,d*2);
                else if(cl>mid)
                 return inqure(mid+1,R,cl,cr,d*2+1);
                else
                {      
                    return inqure(L,mid,cl,mid,d*2)+inqure(mid+1,R,mid+1,cr,d*2+1);//查找时候的判断分为三种情况,全在左面就左查,右面就右查,左右都有就两个都查然后相加;
                    
                }
           }
}
int main()
{    int t,n,i,l,r,q;
     scanf(“%d”,&t);
     while(t–)
     {   scanf(“%d”,&n);
         for(i=1;i<=n;i++)
        {   scanf(“%d”,&num[i]);
        }
           build(1,n,1);//从父结点开始建立//
          scanf(“%d”,&q);
          for(i=1;i<=q;i++)
            {  scanf(“%d %d”,&l,&r);
               int sum=inqure(1,n,l,r,1);//从树根开始查找;
               printf(“%d\n”,sum);
            }
         
      }
      return 0;
 }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178798.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月30日 上午7:16
下一篇 2022年8月30日 上午7:36


相关推荐

  • img图片加载失败时的处理

    img图片加载失败时的处理当想对图片加载失败时进行特殊处理,可以使用onerror事件,里面为需要执行的代码。如果由于其他原因导致onerror事件里加载图片时又报错,此时有可能会导致栈溢出而弹框报错,我们只需在inerror里加上一句话即可。

    2022年6月2日
    44
  • node中封装MongoDB

    node中封装MongoDB前言 封装方法 哪儿都能调用 岂不美哉 首先我们需要下载这个模块 npminstallmo 接下来新建一个 mongo js 文件 写入如下代码 varMongoClie require mongodb MongoClientv require mongodb ObjectID 地址 varurl 导出查询 mongo 自生成的 idexports objid ObjectID 封装 find 查询所有数据

    2026年3月17日
    2
  • Python netcdf_python处理nc文件

    Python netcdf_python处理nc文件  NetCDF(networkCommonDataForm)网络通用数据格式是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作NetCDF数据集。  文件的后缀是.nc  这里采用python的一个专门用来处理.nc文件的库–netCDF4该库的安装直接:pipinstallnetCDF4这个库玩起来稍微比Pandas复杂一些。下面以全球降水量数据为例进行

    2025年8月20日
    59
  • 智能小车设计方案_智能小车研究目的及意义

    智能小车设计方案_智能小车研究目的及意义简介智能循迹小车是基于自动引导机器人系统,用以实现小车自动识别路线,以及选择正确的路线。智能循迹小车是一个运用传感器、单片机、电机驱动及自动控制等技术来实现按照预先设定的模式下,不受人为管理时能够自动实现循迹导航的高新科技。方案论证系统总体方案一、小车控制系统的结构框图二、程序流程框图三、循迹原理的简单描述循迹是指小车在白色地板上,循黑线行走通常采取的方法是红外探测法,红外探测法即利用红外线光遇到白色物体表面具有不同的反射性质的特点,在小车行驶过程…

    2022年10月18日
    3
  • C++进制转换(十进制转二进制、八进制、随意进制)

    C++进制转换(十进制转二进制、八进制、随意进制)

    2021年12月14日
    106
  • 空间向量和矩阵_线性无关的函数内积为零吗

    空间向量和矩阵_线性无关的函数内积为零吗文章目录前言一、集合的基本概念二、向量空间1.运算规则和定理2.RnR^nRn和CnC^nCn三、实内积空间1.内积2.范数四、复内积空间五、线性映射前言本文学习过程来源是《矩阵分析与应用-张贤达》一书.可以通过z-lib下载.线性空间是某一类事物在矩阵代数里的一个抽象的集合表示,线性映射或线性变换则反映线性空间中元素间最基本的线性关系.上面这句话出自书中第14页开头,读下来第一感觉就是云里雾里,毕竟出现了新的名称.对于线性空间可以简单的把它理解为几何空间(实际上不仅仅

    2022年10月21日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号