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

简单线段树模板[通俗易懂]例如: 给你任意几个数,给定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


相关推荐

  • 19种电压转换的电路设计方式

    19种电压转换的电路设计方式标准三端线性稳压器的压差通常是2.0-3.0V。要把5V可靠地转换为3.3V,就不能使用它们。压差为几百个毫伏的低压降(LowDropout,LDO)稳压器,是此类应用的理想选择。图1-1是基本LDO系统的框图,标注了相应的电流。从图中可以看出,LDO由四个主要部分组成:技巧一:使用LDO稳压器,5V向3.3V系统供电标准三端线性稳压器的压差通常是2.0-3.0V。要把5V可靠地转换为3.3V,就不能使用它们。压差为几百个毫伏的低压降(LowD…

    2022年6月2日
    38
  • c++中sqrt函数的使用

    c++中sqrt函数的使用sqrt使用时大多需要要强制类型转化,因为sqrt只支持double和float类型,可以这样c=(int)sqrt((double)a*a+b*b);或者c=(int)sqrt((float)a*a+b*b);

    2022年5月5日
    148
  • 国产化替代方案_excel表格为什么替换不了

    国产化替代方案_excel表格为什么替换不了PHPExcel上一版本1.8.1于2015年发布。该项目已不再维护,可以使用,但是不建议再使用。所有用户都应该迁移到其直接后继者PhpSpreadsheet或其他替代方案。PhpSpreadsheet打破了兼容性,大大提高了代码库质量(命名空间,PSR合规性,最新PHP语言功能的使用等)。文档地址:https://phpspreadsheet.readthedocs.io/en/develo…

    2025年12月14日
    5
  • HSQL测试_qt测试工具

    HSQL测试_qt测试工具采用C/S的模式操作HSQL数据库:   1、建立数据库的目录:      e:\hsqldb目录下建立mydb.properties和mydb.script文件,如果目录下不建立数据库文件则会自动产生这些文件;如果需要在建立库的同时就让数据库      的对象(表等)建立好,则需要在mydb.script中写入这些执行的脚本语句,数据库启动时会读取脚本文件并执行这些脚本语句; …

    2026年2月13日
    8
  • pci设备驱动

    pci设备驱动原文地址 https www cnblogs com xiaoya901109 archive 2012 12 14 2818057 html 一 初始化设备模块 nbsp nbsp 当 Linux 内核启动并完成对所有 PCI 设备进行扫描 登录和分配资源等初始化操作的同时 会建立起系统中所有 PCI 设备的拓扑结构 此后当 PCI 驱动程序需要对设备进行初始化时 一般都会调用如下的代码 staticint init

    2026年3月26日
    1
  • 关于一个网站FLASH导航条的制作

    关于一个网站FLASH导航条的制作http shineday nease net 这里的代码是抄袭过来的 根本是为了说明问题和解决问题 vardrag 0 1 震动参数 varflex 0 7 震动参数 mc y 20 mc goalX 10 nbsp 装入动画后影片剪辑 也就是滑块 首先出现的位置 mc onEnterFrame function nbsp nbsp this Step this Step

    2026年3月17日
    2

发表回复

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

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